| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| --> |
| <div class="row" ng-controller="CubesCtrl" style="margin-top:15px;"> |
| |
| <loading ng-if="loading" text="Loading Cubes..."></loading> |
| |
| <!--Table--> |
| <div class="dataTables_wrapper no-footer"> |
| <div class="row"> |
| <div class="col-xs-9"> |
| <label class="table-header-text">Cubes</label> |
| </div> |
| <div class="col-xs-3"> |
| <form style="display: inline;float:right;" > |
| <span class="input-icon input-icon-right nav-search"> |
| <input type="text" placeholder="Search by name" class="nav-search-input" ng-model="listParams.cubeName" /> |
| <i class="ace-icon fa fa-search blue" ng-click="cubeList.removeAll();reload()"></i> |
| </span> |
| </form> |
| </div> |
| </div> |
| |
| <div ng-if="!loading && cubeList.cubes.length == 0"> |
| <div no-result text="No Cube."></div> |
| </div> |
| <table ng-if="cubeList.cubes.length > 0" class="table table-striped table-bordered table-hover dataTable no-footer"> |
| <!--Header--> |
| <thead> |
| <tr style="cursor: pointer"> |
| <th ng-repeat="theaditem in cubeConfig.theaditems" |
| ng-click="state.filterAttr= theaditem.attr;state.reverseColumn=theaditem.attr;state.filterReverse=!state.filterReverse;"> |
| {{theaditem.name}} |
| <i ng-if="state.reverseColumn!= theaditem.attr" |
| class="fa fa-unsorted"></i> |
| <i ng-if="state.reverseColumn== theaditem.attr && !state.filterReverse" |
| class="fa fa-sort-asc"></i> |
| <i ng-if="state.reverseColumn== theaditem.attr && state.filterReverse" |
| class="fa fa-sort-desc"></i> |
| </th> |
| <th>Actions</th> |
| <th>Admins</th> |
| </tr> |
| </thead> |
| <!--Body--> |
| <tbody ng-repeat="cube in cubeList.cubes | orderObjectBy:state.filterAttr:state.filterReverse "> |
| <tr ng-class="{accordion:true}" style="cursor: pointer" ng-click="cube.showDetail=!cube.showDetail;loadDetailWithStreamingV2Info(cube);"> |
| <td> |
| <i ng-show="!cube.showDetail" class="fa fa-chevron-circle-right blue"></i> |
| <i ng-show="cube.showDetail" class="fa fa-chevron-circle-down blue"></i> |
| {{ cube.name}} |
| </td> |
| <td> |
| <span class="label" |
| ng-class="{'label-success': cube.status=='READY', 'label-default': cube.status=='DISABLED', 'label-warning': cube.status=='DESCBROKEN'}"> |
| {{ cube.status}} |
| </span> |
| </td> |
| <td>{{ cube.project}}</td> |
| <td><span tooltip-html-unsafe="<div style='text-align:left'> |
| Source Table Size: {{dataSize(cube.input_records_size)}}<br/> |
| Expansion Rate: {{(cube.input_records_size>0? cube.size_kb*1024/cube.input_records_size : 0) * 100 | number:2}}% |
| </div>">{{dataSize(cube.size_kb*1024)}}</span></td> |
| <td><span tooltip-html-unsafe="<div style='text-align:left'> |
| Source Table Size: {{dataSize(cube.input_records_size)}}<br/> |
| Expansion Rate: {{(cube.input_records_size>0? cube.size_kb*1024/cube.input_records_size : 0) * 100 | number:2}}% |
| </div>">{{ cube.input_records_count | number:0}}</span></td> |
| <td>{{ (cube.last_build_time | utcToConfigTimeZone) }}</td> |
| <td>{{ cube.owner}}</td> |
| <td>{{ cube.create_time_utc | utcToConfigTimeZone}}</td> |
| <td> |
| <div ng-click="$event.stopPropagation();" class="btn-group"> |
| <button type="button" class="btn btn-default btn-xs dropdown-toggle" |
| data-toggle="dropdown" ng-click="$event.stopPropagation(); listCubeAccess(cube, 'CubeInstance'); listCubeAction(cube)"> |
| Action <span class="ace-icon fa fa-caret-down icon-on-right"></span> |
| </button> |
| <ul ng-if="(userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask,permissions.OPERATION.mask)) && !cube.streamingV2 && actionLoaded" class="dropdown-menu" role="menu" style="right:0;left:auto;"> |
| <li ng-if="cube.status!='READY' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"> |
| <a ng-click="dropCube(cube)" tooltip="Drop the cube, related jobs and data permanently.">Drop</a></li> |
| <li ng-if="userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask)"> |
| <a ng-click="cubeEdit(cube);">Edit</a></li> |
| <li ng-if="cube.status!='DESCBROKEN'"><a ng-click="startJobSubmit(cube);">Build</a></li> |
| <li ng-if="cube.status!='DESCBROKEN'"><a ng-click="startRefresh(cube)">Refresh</a></li> |
| <li ng-if="cube.status!='DESCBROKEN'"><a ng-click="startMerge(cube)">Merge</a></li> |
| <li ng-if="cube.status!='DESCBROKEN'"><a ng-click="startLookupRefresh(cube);">Lookup Refresh</a></li> |
| <li ng-if="cube.status=='READY' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="disable(cube)">Disable</a></li> |
| <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="enable(cube)">Enable</a></li> |
| <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="startDeleteSegment(cube)">Delete Segment</a></li> |
| <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="purge(cube)">Purge</a></li> |
| <li ng-if="cube.status!='DESCBROKEN' && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="cloneCube(cube)">Clone</a></li> |
| <li ng-if="cube.status=='READY' && isAutoMigrateCubeEnabled() && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask)) "><a ng-click="migrateCube(cube)">Migrate</a></li> |
| <li ng-if="cube.can_add_measure && (userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="addMeasure(cube)">Add Measure</a></li> |
| </ul> |
| <ul ng-if="(userService.hasRole('ROLE_ADMIN') || hasPermission('cube', cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask, permissions.OPERATION.mask)) && cube.streamingV2 && actionLoaded" class="dropdown-menu" role="menu" style="right:0;left:auto;"> |
| <li ng-if="cube.status!='DISABLED' && cube.consumeState=='RUNNING'"><a ng-click="pauseCube(cube, $index);">Pause</a></li> |
| <li ng-if="cube.status!='DISABLED' && cube.consumeState=='PAUSED'"><a ng-click="resumeCube(cube, $index);">Resume</a></li> |
| <li ng-if="cube.status!='DISABLED'"><a ng-click="disable(cube, $index)">Disable</a></li> |
| <li ng-if="cube.status!='DISABLED' && userService.hasRole('ROLE_ADMIN')"><a ng-click="viewAssignment(cube, $index);">Assignment</a></li> |
| <li ng-if="cube.status!='DESCBROKEN' && cube.lambda"><a ng-click="startRefresh(cube, $index)">Refresh</a></li> |
| <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission(cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask)) "><a ng-click="dropCube(cube, $index)" tooltip="Drop the cube, related jobs and data permanently.">Drop</a></li> |
| <li ng-if="cube.status=='DISABLED' && (userService.hasRole('ROLE_ADMIN') || hasPermission(cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask))"><a ng-click="cubeEdit(cube);">Edit</a></li> |
| <li><a ng-click="startMerge(cube, $index)">Merge</a></li> |
| <li ng-if="cube.status=='DISABLED'"><a ng-click="enable(cube, $index)">Enable</a></li> |
| <li ng-if="cube.status=='DISABLED'"><a ng-click="purge(cube, $index)">Purge</a></li> |
| <li><a ng-click="cloneCube(cube)">Clone</a></li> |
| </ul> |
| <span ng-if="!(userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask, permissions.OPERATION.mask))" class="dropdown-menu" role="menu"> |
| N/A |
| </span> |
| </div> |
| </td> |
| <td > |
| <div ng-click="$event.stopPropagation();" class="btn-group" ng-if="userService.hasRole('ROLE_ADMIN') || hasPermission('cube',cube, permissions.ADMINISTRATION.mask, permissions.MANAGEMENT.mask)"> |
| <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown"> |
| Action <span class="ace-icon fa fa-caret-down icon-on-right"></span> |
| </button> |
| <ul class="dropdown-menu" role="menu" style="right:0;left:auto;"> |
| <li ng-if="cube.status!='READY'"><a href="cubes/edit/{{cube.name}}/descriptionjson">Edit CubeDesc</a></li> |
| <li><a href="cubes/view/{{cube.name}}/instancejson">View Cube</a></li> |
| </ul> |
| </div> |
| </td> |
| </tr> |
| <tr ng-show="cube.showDetail"> |
| <td colspan="10" style="padding: 10px 30px 10px 30px;"> |
| <div ng-include src="'partials/cubes/cube_detail.html'"></div> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <div class="row"> |
| <div class="col-xs-12"> |
| <kylin-pagination data="cubeList.cubes" load-func="list" action="action"/> |
| </div> |
| </div> |
| <div ng-if="cubeList.cubes.length" class="pull-left font-color-default" style="font-size: 15px" > |
| <strong>Storage: {{getTotalSize(cubeList.cubes)}}</strong> |
| </div> |
| |
| <div ng-include="'partials/jobs/job_submit.html'"></div> |
| <div ng-include="'partials/cubes/streaming_build_tip.html'"></div> |
| <div ng-include="'partials/jobs/job_refresh.html'"></div> |
| <div ng-include="'partials/jobs/job_merge.html'"></div> |
| <div ng-include="'partials/projects/project_create.html'"></div> |
| <div ng-include="'partials/models/model_detail.html'"></div> |
| <div ng-include="'partials/cubes/cube_clone.html'"></div> |
| <div ng-include="'partials/cubes/cube_delete_segment.html'"></div> |
| <div ng-include="'partials/jobs/lookup_refresh.html'"></div> |
| <div ng-include="'partials/streaming/cubeAssignment.html'"></div> |
| </div> |