Browse Source

Merge remote-tracking branch 'upstream/dev-20190415' into dev-20190415

pull/2/head
baoliang 6 years ago
parent
commit
9b710f39ad
  1. 60
      escheduler-api/src/main/java/cn/escheduler/api/dto/CommandStateCount.java
  2. 30
      escheduler-api/src/main/java/cn/escheduler/api/service/DataAnalysisService.java
  3. 38
      escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue
  4. 121
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/gaugeOption.js
  5. 37
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/list.vue
  6. 143
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue
  7. 93
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/mysql.vue
  8. 44
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/servers.scss
  9. 156
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue
  10. 16
      escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/zookeeper.vue
  11. 8
      escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue
  12. 4
      escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/start.vue
  13. 261
      escheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/projectChart.vue
  14. 3
      escheduler-ui/src/js/conf/home/pages/security/pages/queue/_source/list.vue
  15. 10
      escheduler-ui/src/js/conf/home/pages/security/pages/queue/index.vue
  16. 3
      escheduler-ui/src/js/conf/home/pages/security/pages/tenement/_source/list.vue
  17. 10
      escheduler-ui/src/js/conf/home/pages/security/pages/tenement/index.vue
  18. 39
      escheduler-ui/src/js/conf/home/pages/security/pages/token/index.vue
  19. 3
      escheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue
  20. 10
      escheduler-ui/src/js/conf/home/pages/security/pages/users/index.vue
  21. 3
      escheduler-ui/src/js/conf/home/pages/security/pages/warningGroups/_source/list.vue
  22. 10
      escheduler-ui/src/js/conf/home/pages/security/pages/warningGroups/index.vue
  23. 3
      escheduler-ui/src/js/conf/home/pages/security/pages/workerGroups/_source/list.vue
  24. 9
      escheduler-ui/src/js/conf/home/pages/security/pages/workerGroups/index.vue
  25. 21
      escheduler-ui/src/js/conf/home/pages/user/pages/token/_source/createToken.vue
  26. 3
      escheduler-ui/src/js/conf/home/pages/user/pages/token/_source/list.vue
  27. 10
      escheduler-ui/src/js/conf/home/pages/user/pages/token/index.vue
  28. 8
      escheduler-ui/src/js/conf/home/router/index.js
  29. 24
      escheduler-ui/src/js/conf/home/store/projects/actions.js
  30. 2
      escheduler-ui/src/js/conf/home/store/security/actions.js
  31. 11
      escheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js

60
escheduler-api/src/main/java/cn/escheduler/api/dto/CommandStateCount.java

@ -0,0 +1,60 @@
/*
* 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.
*/
package cn.escheduler.api.dto;
import cn.escheduler.common.enums.ExecutionStatus;
/**
* command state count
*/
public class CommandStateCount {
private int errorCount;
private int normalCount;
private ExecutionStatus commandState;
public CommandStateCount(){}
public CommandStateCount(int errorCount, int normalCount, ExecutionStatus commandState) {
this.errorCount = errorCount;
this.normalCount = normalCount;
this.commandState = commandState;
}
public int getErrorCount() {
return errorCount;
}
public void setErrorCount(int errorCount) {
this.errorCount = errorCount;
}
public int getNormalCount() {
return normalCount;
}
public void setNormalCount(int normalCount) {
this.normalCount = normalCount;
}
public ExecutionStatus getCommandState() {
return commandState;
}
public void setCommandState(ExecutionStatus commandState) {
this.commandState = commandState;
}
}

30
escheduler-api/src/main/java/cn/escheduler/api/service/DataAnalysisService.java

@ -17,6 +17,7 @@
package cn.escheduler.api.service;
import cn.escheduler.api.dto.CommandStateCount;
import cn.escheduler.api.dto.DefineUserDto;
import cn.escheduler.api.dto.TaskCountDto;
import cn.escheduler.api.enums.Status;
@ -38,10 +39,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* data analysis service
@ -298,7 +296,16 @@ public class DataAnalysisService {
dataMap.put(errorExecutionStatus.getExecutionStatus(),errorCommandStateCountsMap);
}
result.put(Constants.DATA_LIST, dataMap);
List<CommandStateCount> list = new ArrayList<>();
Iterator<Map.Entry<ExecutionStatus, Map<String, Integer>>> iterator = dataMap.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<ExecutionStatus, Map<String, Integer>> next = iterator.next();
CommandStateCount commandStateCount = new CommandStateCount(next.getValue().get("errorCommandState"),
next.getValue().get("commandState"),next.getKey());
list.add(commandStateCount);
}
result.put(Constants.DATA_LIST, list);
putMsg(result, Status.SUCCESS);
return result;
}
@ -356,9 +363,18 @@ public class DataAnalysisService {
}
}
}
Integer taskQueueCount = 0;
Integer taskKillCount = 0;
if (tasksQueueIds.length != 0){
taskQueueCount = taskInstanceMapper.countTask(loginUser.getId(),loginUser.getUserType(),projectId, tasksQueueIds);
}
if (tasksQueueIds.length != 0){
taskKillCount = taskInstanceMapper.countTask(loginUser.getId(),loginUser.getUserType(),projectId, tasksQueueIds);
}
Integer taskQueueCount = taskInstanceMapper.countTask(loginUser.getId(),loginUser.getUserType(),projectId, tasksQueueIds);
Integer taskKillCount = taskInstanceMapper.countTask(loginUser.getId(),loginUser.getUserType(),projectId, tasksQueueIds);
dataMap.put("taskQueue",taskQueueCount);
dataMap.put("taskKill",taskKillCount);

38
escheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue

@ -27,6 +27,20 @@
</div>
</div>
</m-list-box>
<template v-if="!sqlType && showType.length">
<m-list-box>
<div slot="text">收件人</div>
<div slot="content">
<m-email v-model="receivers" :repeat-data="receiversCc"></m-email>
</div>
</m-list-box>
<m-list-box>
<div slot="text">抄送人</div>
<div slot="content">
<m-email v-model="receiversCc" :repeat-data="receivers"></m-email>
</div>
</m-list-box>
</template>
<m-list-box v-show="type === 'HIVE'">
<div slot="text">{{$t('SQL Parameter')}}</div>
<div slot="content">
@ -83,6 +97,7 @@
import mDatasource from './_source/datasource'
import mLocalParams from './_source/localParams'
import disabledState from '@/module/mixin/disabledState'
import mEmail from '@/conf/home/pages/projects/pages/definition/pages/list/_source/email'
import codemirror from '@/conf/home/pages/resource/pages/file/pages/_source/codemirror'
let editor
@ -108,7 +123,11 @@
// Form/attachment
showType: ['TABLE'],
// Sql parameter
connParams: ''
connParams: '',
// recipients
receivers: [],
// copy to
receiversCc: []
}
},
mixins: [disabledState],
@ -174,6 +193,8 @@
sql: editor.getValue(),
udfs: this.udfs,
sqlType: this.sqlType,
receivers: this.receivers.join(','),
receiversCc: this.receiversCc.join(','),
showType: (() => {
/**
* Special processing return order TABLE,ATTACHMENT
@ -223,12 +244,23 @@
if (val) {
this.showType = []
}
if (val !== 0) {
this.receivers = []
this.receiversCc = []
}
},
// Listening data source
type (val) {
if (val !== 'HIVE') {
this.connParams = ''
}
},
//
showType (val) {
if (!val.length) {
this.receivers = []
this.receiversCc = []
}
}
},
created () {
@ -245,6 +277,8 @@
this.connParams = o.params.connParams || ''
this.localParams = o.params.localParams || []
this.showType = o.params.showType.split(',') || []
this.receivers = o.params.receivers && o.params.receivers.split(',') || []
this.receiversCc = o.params.receiversCc && o.params.receiversCc.split(',') || []
}
},
mounted () {
@ -262,6 +296,6 @@
}
},
computed: {},
components: { mListBox, mDatasource, mLocalParams, mUdfs, mSqlType }
components: { mListBox, mDatasource, mLocalParams, mUdfs, mSqlType, mEmail }
}
</script>

121
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/gaugeOption.js

@ -0,0 +1,121 @@
export default {
series: [
{
type: 'gauge',
center: ['50%', '45%'], // 仪表位置
radius: '80%', // 仪表大小
startAngle: 200, // 开始角度
endAngle: -20, // 结束角度
axisLine: {
show: false,
lineStyle: { // 属性lineStyle控制线条样式
color: [
[ 0.5, new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ // eslint-disable-line
offset: 1,
color: '#E75F25' // 50% 处的颜色
}, {
offset: 0.8,
color: '#D9452C' // 40% 处的颜色
}], false) ], // 100% 处的颜色
[ 0.7, new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ // eslint-disable-line
offset: 1,
color: '#FFC539' // 70% 处的颜色
}, {
offset: 0.8,
color: '#FE951E' // 66% 处的颜色
}, {
offset: 0,
color: '#E75F25' // 50% 处的颜色
}], false) ],
[ 0.9, new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ // eslint-disable-line
offset: 1,
color: '#C7DD6B' // 90% 处的颜色
}, {
offset: 0.8,
color: '#FEEC49' // 86% 处的颜色
}, {
offset: 0,
color: '#FFC539' // 70% 处的颜色
}], false) ],
[1, new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { // eslint-disable-line
offset: 0.2,
color: '#1CAD52' // 92% 处的颜色
}, {
offset: 0,
color: '#C7DD6B' // 90% 处的颜色
}], false) ]
],
width: 10
}
},
splitLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
},
pointer: { // 指针样式
length: '45%'
},
detail: {
show: false
}
},
{
type: 'gauge',
center: ['50%', '45%'], // 默认全局居中
radius: '70%',
startAngle: 200,
endAngle: -20,
axisLine: {
show: true,
lineStyle: { // 属性lineStyle控制线条样式
color: [ // 表盘颜色
[ 0.5, '#DA462C' ], // 0-50%处的颜色
[ 0.7, '#FF9618' ], // 51%-70%处的颜色
[ 0.9, '#FFED44' ], // 70%-90%处的颜色
[ 1, '#20AE51' ]// 90%-100%处的颜色
],
width: 30// 表盘宽度
}
},
splitLine: { // 分割线样式(及10、20等长线样式)
length: 30,
lineStyle: { // 属性lineStyle控制线条样式
width: 2
}
},
axisTick: { // 刻度线样式(及短线样式)
length: 20
},
axisLabel: { // 文字样式(及“10”、“20”等文字样式)
color: 'black',
distance: 5 // 文字离表盘的距离
},
detail: {
formatter: '{score|{value}%}',
offsetCenter: [0, '50%'],
backgroundColor: '#2D8BF0',
height: 30,
rich: {
score: {
color: 'white',
fontFamily: '微软雅黑',
fontSize: 32
}
}
},
data: [{
value: 70,
label: {
textStyle: {
fontSize: 12
}
}
}]
}
]
}

37
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/list.vue

@ -7,25 +7,28 @@
<span>{{$t('#')}}</span>
</th>
<th>
<span>{{$t('IP')}}</span>
<span>node</span>
</th>
<th>
<span>{{$t('Process Pid')}}</span>
<span>ip</span>
</th>
<th>
<span>{{$t('zk registration directory')}}</span>
<span>模式</span>
</th>
<th>
<span>{{$t('cpuUsage')}}</span>
<span>连接数</span>
</th>
<th>
<span>{{$t('memoryUsage')}}</span>
<span>watch数</span>
</th>
<th>
<span>{{$t('Create Time')}}</span>
<span>数据量</span>
</th>
<th>
<span>{{$t('Last heartbeat time')}}</span>
<span>Sent/Received</span>
</th>
<th>
<span>节点自检状态</span>
</th>
</tr>
<tr v-for="(item, $index) in list" :key="$index">
@ -34,22 +37,25 @@
</td>
<td>
<span>
<a href="javascript:" class="links">{{item.host}}</a>
<a href="javascript:" class="links">task1</a>
</span>
</td>
<td><span>{{item.port}}</span></td>
<td><span>192.11.1.1</span></td>
<td>
<span>{{item.zkDirectory}}</span>
<span>2222</span>
</td>
<td>
<span>{{_rtResInfo(JSON.parse(item.resInfo)['cpuUsage'])}}</span>
<span>3333</span>
</td>
<td>
<span>{{_rtResInfo(JSON.parse(item.resInfo)['memoryUsage'])}}</span>
<span>4444</span>
</td>
<td><span>{{item.createTime | formatDate}}</span></td>
<td><span>5555</span></td>
<td>
<span>{{item.lastHeartbeatTime | formatDate}}</span>
<span>6666</span>
</td>
<td>
<span>7777</span>
</td>
</tr>
</table>
@ -70,9 +76,6 @@
list: Array
},
methods: {
_rtResInfo (val) {
return (val * 100).toFixed(2) + ' %'
}
}
}
</script>

143
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/master.vue

@ -1,11 +1,129 @@
<template>
<m-list-construction :title="$t('Service-Master')">
<m-list-construction :title="'Master管理'">
<template slot="content">
<div class="servers-wrapper">
<div class="row">
<div class="col-md-4">.col-md-8</div>
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a1" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a2" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #0098e1;">12</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a3" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a4" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #7a56b8;">72</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a5" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a6" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #e84d80;">44</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
</div>
</template>
@ -16,6 +134,7 @@
import mList from './_source/list'
import mSpin from '@/module/components/spin/spin'
import mNoData from '@/module/components/noData/noData'
import gaugeOption from './_source/gaugeOption'
import mListConstruction from '@/module/components/listConstruction/listConstruction'
export default {
@ -36,14 +155,20 @@
},
watch: {},
created () {
this.isLoading = true
this.getProcessMasterList().then(res => {
this.masterList = res.data
this.isLoading = false
})
},
mounted () {
let b = {}
let a = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6']
a.forEach((v, i) => {
b[v] = echarts.init(document.getElementById(v)) // eslint-disable-line
b[v].setOption(gaugeOption, true)
})
},
components: { mList, mListConstruction, mSpin, mNoData }
}
</script>
<style lang="scss" rel="stylesheet/scss">
@import "./servers";
</style>

93
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/mysql.vue

@ -1,40 +1,83 @@
<template>
<div class="mysql-model">
mysql
</div>
<m-list-construction :title="'Mysql管理'">
<template slot="content">
<div class="servers-wrapper">
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>正常与否</span>
</div>
<div class="value-p">
<b style="color: #0098e1;">78</b>
</div>
<div class="text-1">
正常与否
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>最大连接数</span>
</div>
<div class="value-p">
<b style="color: #ffcf3d;">55</b>
</div>
<div class="text-1">
最大连接数
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>当前活跃连接</span>
</div>
<div class="value-p">
<b style="color: #f07d7d;">32</b>
</div>
<div class="text-1">
当前活跃连接
</div>
</div>
</div>
</div>
</div>
</template>
</m-list-construction>
</template>
<script>
import { mapActions } from 'vuex'
import mList from './_source/list'
import mSpin from '@/module/components/spin/spin'
import mNoData from '@/module/components/noData/noData'
import mListConstruction from '@/module/components/listConstruction/listConstruction'
export default {
name: 'mysql',
name: 'servers-mysql',
data () {
return {}
return {
pageSize: 10,
pageNo: 1,
totalPage: null,
searchVal: '',
isLoading: false,
masterList: []
}
},
props: {},
methods: {},
watch: {},
beforeCreate () {
methods: {
...mapActions('security', ['getProcessMasterList'])
},
watch: {},
created () {
},
beforeMount () {
},
mounted () {
},
beforeUpdate () {
},
updated () {
},
beforeDestroy () {
},
destroyed () {
},
computed: {},
components: {}
components: { mList, mListConstruction, mSpin, mNoData }
}
</script>
<style lang="scss" rel="stylesheet/scss">
.mysql-model {
}
</style>
@import "./servers";
</style>

44
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/servers.scss

@ -0,0 +1,44 @@
.servers-wrapper {
padding: 16px;
>.row {
margin-bottom: 20px;
}
.gridb-model {
width: 100%;
height: 360px;
overflow: hidden;
border: 1px solid #E8E8E8;
margin: 0 auto;
>.title {
height: 36px;
line-height: 36px;
background: #F9F9F9;
border-bottom: 1px solid #E8E8E8;
span {
padding-left: 8px;
}
}
.gauge-echart {
width: 350px;
margin: auto;
margin-bottom: -80px;
}
.text-1 {
width: 100%;
margin: 0 auto;
font-size: 32px;
text-align: center;
}
.value-p {
height: 254px;
line-height: 254px;
text-align: center;
>b {
font-size: 140px;
color: #333;
}
}
}
}

156
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/worker.vue

@ -1,13 +1,131 @@
<template>
<m-list-construction :title="$t('Service-Worker')">
<m-list-construction :title="'Worker管理'">
<template slot="content">
<template v-if="workerList.length">
<m-list :list="workerList"></m-list>
</template>
<template v-if="!workerList.length">
<m-no-data></m-no-data>
</template>
<m-spin :is-spin="isLoading" ></m-spin>
<div class="servers-wrapper">
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a1" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a2" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #0098e1;">83</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a3" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a4" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #7281c2;">18</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>Cpu详细信息</span>
</div>
<div class="gauge-echart">
<div id="a5" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="gauge-echart">
<div id="a6" style="height: 380px;"></div>
</div>
<div class="text-1" style="margin-top: -126px">
cpu
</div>
</div>
</div>
<div class="col-md-4">
<div class="gridb-model">
<div class="title">
<span>内存详细信息</span>
</div>
<div class="value-p">
<b style="color: #f2ac6f;">15</b>
</div>
<div class="text-1">
cpu
</div>
</div>
</div>
</div>
</div>
</template>
</m-list-construction>
</template>
@ -16,10 +134,11 @@
import mList from './_source/list'
import mSpin from '@/module/components/spin/spin'
import mNoData from '@/module/components/noData/noData'
import gaugeOption from './_source/gaugeOption'
import mListConstruction from '@/module/components/listConstruction/listConstruction'
export default {
name: 'worker-index',
name: 'servers-worker',
data () {
return {
pageSize: 10,
@ -27,23 +146,28 @@
totalPage: null,
searchVal: '',
isLoading: false,
workerList: []
masterList: []
}
},
props: {},
methods: {
...mapActions('security', ['getProcessWorkerList'])
...mapActions('security', ['getProcessMasterList'])
},
watch: {},
created () {
this.isLoading = true
this.getProcessWorkerList().then(res => {
this.workerList = res.data
this.isLoading = false
})
},
mounted () {
let b = {}
let a = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6']
a.forEach((v, i) => {
b[v] = echarts.init(document.getElementById(v)) // eslint-disable-line
b[v].setOption(gaugeOption, true)
})
},
components: { mList, mListConstruction, mSpin, mNoData }
}
</script>
<style lang="scss" rel="stylesheet/scss">
@import "./servers";
</style>

16
escheduler-ui/src/js/conf/home/pages/monitor/pages/servers/zookeeper.vue

@ -1,10 +1,10 @@
<template>
<m-list-construction :title="$t('Service-Master')">
<m-list-construction :title="'Zookeeper管理'">
<template slot="content">
<template v-if="masterList.length">
<m-list :list="masterList"></m-list>
<template v-if="zookeeperList.length">
<m-list :list="zookeeperList"></m-list>
</template>
<template v-if="!masterList.length">
<template v-if="!zookeeperList.length">
<m-no-data></m-no-data>
</template>
<m-spin :is-spin="isLoading" ></m-spin>
@ -27,7 +27,7 @@
totalPage: null,
searchVal: '',
isLoading: false,
masterList: []
zookeeperList: []
}
},
props: {},
@ -36,11 +36,7 @@
},
watch: {},
created () {
this.isLoading = true
this.getProcessMasterList().then(res => {
this.masterList = res.data
this.isLoading = false
})
this.zookeeperList = [{ id: 1 }, { id: 1 }, { id: 1 }, { id: 1 }]
},
mounted () {
},

8
escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/email.vue

@ -3,7 +3,7 @@
<div class="clearfix input-element">
<span class="tag-wrapper" v-for="(item,$index) in activeList" :class="activeIndex === $index ? 'active' : ''">
<span class="tag-text">{{item}}</span>
<i class="remove-tag ans-icon-close" @click="_del($index)"></i>
<i class="remove-tag ans-icon-close" @click.stop="_del($index)"></i>
</span>
<x-poptip
placement="bottom-start"
@ -15,7 +15,7 @@
<div class="ans-scroller" style=" max-height: 300px;">
<div class="scroll-area-wrapper scroll-transition">
<ul class="dropdown-container">
<li class="ans-option" v-for="(item,$index) in emailList" @click="_selectEmail($index + 1)">
<li class="ans-option" v-for="(item,$index) in emailList" @click.stop="_selectEmail($index + 1)">
<span class="default-option-class" :class="index === ($index + 1) ? 'active' : ''">{{item}}</span>
</li>
</ul>
@ -212,7 +212,7 @@
*/
_handlerEmailWitch () {
setTimeout(() => {
this.emailWidth = parseInt(688 - $(this.$refs.emailInput).position().left - 20)
this.emailWidth = parseInt($('.email-model').width() - $(this.$refs.emailInput).position().left - 20)
if (this.emailWidth < 80) {
this.emailWidth = 200
}
@ -274,7 +274,7 @@
<style lang="scss" rel="stylesheet/scss">
.email-model {
width: 688px;
width: 100%;
.input-element {
min-height: 32px;
padding: 1px 8px;

4
escheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/start.vue

@ -83,7 +83,7 @@
<div class="text">
{{$t('Recipient')}}
</div>
<div class="cont">
<div class="cont" style="width: 688px;">
<m-email v-model="receivers" :repeat-data="receiversCc"></m-email>
</div>
</div>
@ -91,7 +91,7 @@
<div class="text">
{{$t('Cc')}}
</div>
<div class="cont">
<div class="cont" style="width: 688px;">
<m-email v-model="receiversCc" :repeat-data="receivers"></m-email>
</div>
</div>

261
escheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/projectChart.vue

@ -7,7 +7,7 @@
:panel-num="2"
placement="bottom-end"
@on-change="_datepicker"
:value="scheduleTime"
:value="[searchParams.startDate,searchParams.endDate]"
type="daterange"
:placeholder="$t('Select date range')"
format="YYYY-MM-DD HH:mm:ss">
@ -30,7 +30,7 @@
<th>{{$t('Number')}}</th>
<th>{{$t('State')}}</th>
</tr>
<tr v-for="(item,$index) in taskCountDtosList">
<tr v-for="(item,$index) in taskCtatusList">
<td><span>{{$index+1}}</span></td>
<td>
<span>
@ -60,7 +60,65 @@
<th>{{$t('Number')}}</th>
<th>{{$t('State')}}</th>
</tr>
<tr v-for="(item,$index) in processStateCountList">
<tr v-for="(item,$index) in processStateList">
<td><span>{{$index+1}}</span></td>
<td><span><a href="javascript:" @click="id && _goProcess(item.key)" :class="id ?'links':''">{{item.value}}</a></span></td>
<td><span class="ellipsis" style="width: 98%;" :title="item.key">{{item.key}}</span></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="row" style="padding-top: 20px;">
<div class="col-md-6">
<div class="chart-title">
<span>命令状态统计</span>
</div>
<div class="row">
<div class="col-md-7">
<div id="command-state-pie" style="height:260px;margin-top: 100px;"></div>
</div>
<div class="col-md-5">
<div class="table-small-model">
<table>
<tr>
<th width="40">{{$t('#')}}</th>
<th>{{$t('Number')}}</th>
<th>{{$t('State')}}</th>
</tr>
<tr v-for="(item,$index) in taskCtatusList">
<td><span>{{$index+1}}</span></td>
<td>
<span>
<a href="javascript:" @click="id && _goTask(item.key)" :class="id ?'links':''">{{item.value}}</a>
</span>
</td>
<td><span class="ellipsis" style="width: 98%;" :title="item.key">{{item.key}}</span></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="chart-title">
<span>队列统计</span>
</div>
<div class="row">
<div class="col-md-7">
<div id="process-state-pie" style="height:260px;margin-top: 100px;"></div>
</div>
<div class="col-md-5">
<div class="table-small-model">
<table>
<tr>
<th width="40">{{$t('#')}}</th>
<th>{{$t('Number')}}</th>
<th>{{$t('State')}}</th>
</tr>
<tr v-for="(item,$index) in processStateList">
<td><span>{{$index+1}}</span></td>
<td><span><a href="javascript:" @click="id && _goProcess(item.key)" :class="id ?'links':''">{{item.value}}</a></span></td>
<td><span class="ellipsis" style="width: 98%;" :title="item.key">{{item.key}}</span></td>
@ -93,32 +151,37 @@
import dayjs from 'dayjs'
import { mapActions } from 'vuex'
import { pie, bar } from './chartConfig'
import { stateType } from '@/conf/home/pages/projects/pages/_source/instanceConditions/common'
import Chart from '~/@analysys/ana-charts'
import mNoData from '@/module/components/noData/noData'
import mSpin from '@/module/components/spin/spin'
import mNoData from '@/module/components/noData/noData'
import { stateType } from '@/conf/home/pages/projects/pages/_source/instanceConditions/common'
export default {
name: 'perject-chart',
data () {
return {
taskCountDtosList: [],
processStateCountList: [],
userList: [],
scheduleTime: ['2018-11-16 00:00:00', '2018-11-16 17:13:11'],
isLoading: true
isLoading: true,
taskCtatusList: [],
processStateList: [],
defineUserList: [],
commandStateList: [],
searchParams: {
projectId: this.id,
startDate: '',
endDate: ''
}
}
},
props: {
id: Number
},
methods: {
...mapActions('projects', ['getTaskCtatusCount', 'getProcessStateCount', 'getDefineUserCount']),
...mapActions('projects', ['getTaskCtatusCount', 'getProcessStateCount', 'getDefineUserCount', 'getCommandStateCount', 'getQueueCount']),
_datepicker (val) {
this.scheduleTime = val
this._stateTypePie()
this._processStatePie()
this.searchParams.startDate = val[0]
this.searchParams.endDate = val[1]
this._getData(false)
},
_goTask (name) {
this.$router.push({
@ -140,99 +203,107 @@
}
})
},
_stateTypePie () {
this.taskCountDtosList = []
this.getTaskCtatusCount({
projectId: this.id,
startDate: this.scheduleTime[0],
endDate: this.scheduleTime[1]
}).then(res => {
let data = res.data.taskCountDtos
this.taskCountDtosList = _.map(data, v => {
return {
key: _.find(stateType, ['code', v.taskStateType])['label'],
value: v.count,
type: 'type'
}
})
const myChart = Chart.pie('#task-status-pie', this.taskCountDtosList, { title: '' })
myChart.echart.setOption(pie)
//
if (this.id) {
myChart.echart.on('click', e => {
this._goTask(e.data.name)
})
_handleTaskCtatus (res) {
let data = res.data.taskCountDtos
this.taskCtatusList = _.map(data, v => {
return {
key: _.find(stateType, ['code', v.taskStateType])['label'],
value: v.count,
type: 'type'
}
}).catch(e => {})
},
_processStatePie () {
this.processStateCountList = []
this.getProcessStateCount({
projectId: this.id,
startDate: this.scheduleTime[0],
endDate: this.scheduleTime[1]
}).then(res => {
let data = res.data.taskCountDtos
this.processStateCountList = _.map(data, v => {
return {
key: _.find(stateType, ['code', v.taskStateType])['label'],
value: v.count
}
})
const myChart = Chart.pie('#task-status-pie', this.taskCtatusList, { title: '' })
myChart.echart.setOption(pie)
//
if (this.id) {
myChart.echart.on('click', e => {
this._goTask(e.data.name)
})
const myChart = Chart.pie('#process-state-pie', this.processStateCountList, { title: '' })
myChart.echart.setOption(pie)
//
if (this.id) {
myChart.echart.on('click', e => {
this._goProcess(e.data.name)
})
}
}).catch(e => {})
}
},
_processDefinitionBar () {
this.getDefineUserCount({
projectId: this.id
}).then(res => {
let data = res.data.userList
this.userList = _.map(data, v => {
return {
key: v.userName + ',' + v.userId + ',' + v.count,
value: v.count
}
_handleProcessState (res) {
let data = res.data.taskCountDtos
this.processStateList = _.map(data, v => {
return {
key: _.find(stateType, ['code', v.taskStateType])['label'],
value: v.count
}
})
const myChart = Chart.pie('#process-state-pie', this.processStateList, { title: '' })
myChart.echart.setOption(pie)
//
if (this.id) {
myChart.echart.on('click', e => {
this._goProcess(e.data.name)
})
const myChart = Chart.bar('#process-definition-bar', this.userList, {})
myChart.echart.setOption(bar)
//
if (this.id) {
myChart.echart.on('click', e => {
this.$router.push({
name: 'projects-definition-list',
query: {
userId: e.name.split(',')[1]
}
})
}
},
_handleDefineUser (res) {
let data = res.data.userList
this.defineUserList = _.map(data, v => {
return {
key: v.userName + ',' + v.userId + ',' + v.count,
value: v.count
}
})
const myChart = Chart.bar('#process-definition-bar', this.defineUserList, {})
myChart.echart.setOption(bar)
//
if (this.id) {
myChart.echart.on('click', e => {
this.$router.push({
name: 'projects-definition-list',
query: {
userId: e.name.split(',')[1]
}
})
})
}
},
_handleCommandState (res) {
},
_handleQueue () {},
_getData (is = true) {
this.isLoading = true
let ioList = [
this.getTaskCtatusCount(this.searchParams),
this.getProcessStateCount(this.searchParams),
this.getCommandStateCount(this.searchParams),
this.getQueueCount(this.searchParams)
]
if (is) {
ioList.push(this.getDefineUserCount(_.pick(this.searchParams, ['projectId'])))
}
Promise.all(ioList).then(res => {
this._handleTaskCtatus(res[0])
this._handleProcessState(res[1])
this._handleCommandState(res[2])
this._handleQueue(res[3])
if (is) {
this._handleDefineUser(res[4])
}
}).catch(e => {})
setTimeout(() => {
this.isLoading = false
}, 800)
}).catch(e => {
console.log(e)
this.isLoading = false
})
}
},
watch: {
},
created () {
this.scheduleTime = [dayjs().format('YYYY-MM-DD 00:00:00'), dayjs().format('YYYY-MM-DD HH:mm:ss')]
this.isLoading = true
Promise.all([
this._stateTypePie(),
this._processStatePie(),
this._processDefinitionBar()
]).then(res => {
setTimeout(() => {
this.isLoading = false
}, 800)
}).catch(e => {
this.isLoading = false
})
this.searchParams.startDate = dayjs().format('YYYY-MM-DD 00:00:00')
this.searchParams.endDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
// init get data
this._getData()
},
mounted () {

3
escheduler-ui/src/js/conf/home/pages/security/pages/queue/_source/list.vue

@ -80,7 +80,6 @@
<script>
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
export default {
name: 'tenement-list',
@ -112,7 +111,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'queue-index')._create(item)
this.$emit('on-edit', item)
}
},
watch: {

10
escheduler-ui/src/js/conf/home/pages/security/pages/queue/index.vue

@ -9,7 +9,12 @@
</template>
<template slot="content">
<template v-if="queueList.length">
<m-list :queue-list="queueList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:queue-list="queueList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -60,6 +65,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

3
escheduler-ui/src/js/conf/home/pages/security/pages/tenement/_source/list.vue

@ -86,7 +86,6 @@
<script>
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
export default {
name: 'tenement-list',
@ -118,7 +117,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'tenement-index')._create(item)
this.$emit('on-edit', item)
}
},
watch: {

10
escheduler-ui/src/js/conf/home/pages/security/pages/tenement/index.vue

@ -9,7 +9,12 @@
</template>
<template slot="content">
<template v-if="tenementList.length">
<m-list :tenement-list="tenementList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:tenement-list="tenementList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -60,6 +65,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

39
escheduler-ui/src/js/conf/home/pages/security/pages/token/index.vue

@ -0,0 +1,39 @@
<template>
<m-token></m-token>
</template>
<script>
import mToken from '@/conf/home/pages/user/pages/token'
export default {
name: 'token-index',
data () {
return {}
},
props: {},
methods: {},
watch: {},
beforeCreate () {
},
created () {
},
beforeMount () {
},
mounted () {
},
beforeUpdate () {
},
updated () {
},
beforeDestroy () {
},
destroyed () {
},
computed: {},
components: { mToken }
}
</script>
<style lang="scss" rel="stylesheet/scss">
.index-model {
}
</style>

3
escheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue

@ -99,7 +99,6 @@
import i18n from '@/module/i18n'
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
import mTransfer from '@/module/components/transfer/transfer'
export default {
@ -132,7 +131,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'users-index')._create(item)
this.$emit('on-edit', item)
},
_authProject (item, i) {
this.$refs[`poptip-auth-${i}`][0].doClose()

10
escheduler-ui/src/js/conf/home/pages/security/pages/users/index.vue

@ -9,7 +9,12 @@
</template>
<template slot="content">
<template v-if="userList.length">
<m-list :user-list="userList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:user-list="userList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -60,6 +65,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

3
escheduler-ui/src/js/conf/home/pages/security/pages/warningGroups/_source/list.vue

@ -72,7 +72,6 @@
import i18n from '@/module/i18n'
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
import mTransfer from '@/module/components/transfer/transfer'
export default {
@ -105,7 +104,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'warning-groups-index')._create(item)
this.$emit('on-edit', item)
},
_mangeUser (item, i) {
this.getAuthList({

10
escheduler-ui/src/js/conf/home/pages/security/pages/warningGroups/index.vue

@ -9,7 +9,12 @@
</template>
<template slot="content">
<template v-if="alertgroupList.length">
<m-list :alertgroup-list="alertgroupList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:alertgroup-list="alertgroupList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -60,6 +65,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

3
escheduler-ui/src/js/conf/home/pages/security/pages/workerGroups/_source/list.vue

@ -66,7 +66,6 @@
// import i18n from '@/module/i18n'
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
export default {
name: 'user-list',
@ -98,7 +97,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'worker-groups-index')._create(item)
this.$emit('on-edit', item)
}
},
watch: {

9
escheduler-ui/src/js/conf/home/pages/security/pages/workerGroups/index.vue

@ -9,7 +9,11 @@
</template>
<template slot="content">
<template v-if="workerGroupList.length">
<m-list :worker-group-list="workerGroupList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:worker-group-list="workerGroupList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -60,6 +64,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

21
escheduler-ui/src/js/conf/home/pages/user/pages/token/_source/createToken.vue

@ -18,7 +18,7 @@
</x-datepicker>
</template>
</m-list-box-f>
<m-list-box-f>
<m-list-box-f v-if="auth">
<template slot="name"><b>*</b>用户</template>
<template slot="content">
<x-select v-model="userId" @on-change="_onChange">
@ -53,6 +53,7 @@
import dayjs from 'dayjs'
// import i18n from '@/module/i18n'
import store from '@/conf/home/store'
import Permissions from '@/module/permissions'
import mPopup from '@/module/components/popup/popup'
import mListBoxF from '@/module/components/listBoxF/listBoxF'
@ -66,7 +67,8 @@
disabledDate: date => (date.getTime() - new Date(new Date().getTime() - 24 * 60 * 60 * 1000)) < 0,
token: '',
userIdList: [],
tokenLoading: false
tokenLoading: false,
auth: !Permissions.getAuth()
}
},
props: {
@ -128,16 +130,23 @@
},
watch: {},
created () {
this.store.dispatch(`security/getUsersList`).then(res => {
this.userIdList = _.map(res, v => _.pick(v, ['id', 'userName']))
const d = (userId) => {
if (this.item) {
this.expireTime = this.item.expireTime
this.userId = this.item.userId
this.token = this.item.token
} else {
this.userId = this.userIdList[0].id
this.userId = userId
}
})
}
if (this.auth) {
this.store.dispatch(`security/getUsersList`).then(res => {
this.userIdList = _.map(res, v => _.pick(v, ['id', 'userName']))
d(this.userIdList[0].id)
})
} else {
d(this.store.state.user.userInfo.id)
}
},
mounted () {
},

3
escheduler-ui/src/js/conf/home/pages/user/pages/token/_source/list.vue

@ -72,7 +72,6 @@
<script>
import { mapActions } from 'vuex'
import '@/module/filter/formatDate'
import { findComponentDownward } from '@/module/util/'
export default {
name: 'token-list',
@ -104,7 +103,7 @@
})
},
_edit (item) {
findComponentDownward(this.$root, 'token-index')._create(item)
this.$emit('on-edit', item)
}
},
watch: {

10
escheduler-ui/src/js/conf/home/pages/user/pages/token/index.vue

@ -9,7 +9,12 @@
</template>
<template slot="content">
<template v-if="tokenList.length">
<m-list :token-list="tokenList" :page-no="searchParams.pageNo" :page-size="searchParams.pageSize"></m-list>
<m-list @on-edit="_onEdit"
:token-list="tokenList"
:page-no="searchParams.pageNo"
:page-size="searchParams.pageSize">
</m-list>
<div class="page-box">
<x-page :current="parseInt(searchParams.pageNo)" :total="total" :page-size="searchParams.pageSize" show-elevator @on-change="_page"></x-page>
</div>
@ -61,6 +66,9 @@
_page (val) {
this.searchParams.pageNo = val
},
_onEdit (item) {
this._create(item)
},
_create (item) {
let self = this
let modal = this.$modal.dialog({

8
escheduler-ui/src/js/conf/home/router/index.js

@ -325,6 +325,14 @@ const router = new Router({
meta: {
title: `workerGroups`
}
},
{
path: '/security/token',
name: 'token-manage',
component: resolve => require(['../pages/security/pages/token/index'], resolve),
meta: {
title: `token`
}
}
]
},

24
escheduler-ui/src/js/conf/home/store/projects/actions.js

@ -78,6 +78,30 @@ export default {
})
})
},
/**
* get command state count
*/
getCommandStateCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/command-state-count`, payload, res => {
resolve(res)
}).catch(e => {
reject(e)
})
})
},
/**
* get command state count
*/
getQueueCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/queue-count`, payload, res => {
resolve(res)
}).catch(e => {
reject(e)
})
})
},
/**
* Process status statistics
*/

2
escheduler-ui/src/js/conf/home/store/security/actions.js

@ -435,7 +435,7 @@ export default {
let list = res.data
list.unshift({
id: -1,
name: 'All'
name: 'Default'
})
state.workerGroupsListAll = list
resolve(list)

11
escheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js

@ -117,6 +117,15 @@ let menu = {
disabled: true,
icon: 'fa-address-book',
children: []
},
{
name: `令牌管理`,
id: 2,
path: 'token-manage',
isOpen: true,
icon: 'fa-file-text',
children: [],
disabled: true
}
],
resource: [
@ -178,7 +187,7 @@ let menu = {
isOpen: true,
icon: 'fa-file-text',
children: [],
disabled: !Permissions.getAuth()
disabled: Permissions.getAuth()
}
],
monitor: [

Loading…
Cancel
Save