Authored by 王涛

Merge branch 'master' of http://192.168.1.136:82/monitor_v3/hg-monitor-web

 Conflicts:
	doc/SQL/zj/V1015_1_乙方运维数据库设计SQL.txt
	hg-monitor-web-zj/src/main/resources/static/vue3/src/components/page/operationMaintenance/user/index.js
@@ -111,42 +111,114 @@ INSERT INTO `user-center`.`sys_menu` (`id`, `parentId`, `menuCode`, `name`, `url @@ -111,42 +111,114 @@ INSERT INTO `user-center`.`sys_menu` (`id`, `parentId`, `menuCode`, `name`, `url
111 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000009); 111 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000009);
112 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000011); 112 INSERT INTO `user-center`.`sys_role_menu` (`roleId`, `menuId`) VALUES (1, 1000011);
113 -- 8、修改项目表中的预留字段 113 -- 8、修改项目表中的预留字段
114 -ALTER TABLE `cloud_backend_monitor`.`b_ops_project` 114 +ALTER TABLE `cloud_backend_monitor`.`b_ops_project`
115 MODIFY COLUMN `state` int NULL DEFAULT 0 COMMENT '0:正常,1:延期,3:预留' AFTER `remark`; 115 MODIFY COLUMN `state` int NULL DEFAULT 0 COMMENT '0:正常,1:延期,3:预留' AFTER `remark`;
116 116
117 --- 9、同步流程业务添加触发器  
118 --- 新增触发器  
119 -DELIMITER $$  
120 -CREATE TRIGGER syn_business_add AFTER INSERT ON b_bustype  
121 -FOR EACH ROW  
122 -begin  
123 - IF NEW.isLeaf = 1 THEN  
124 - INSERT INTO `itsm_demo`.`system_handler` (`system_id`, `system_name`, `sort`, `system_type`, `enable`) VALUES (NEW.busId, NEW.busTypeName, NEW.sort, "0","0");  
125 - END IF;  
126 -end$$  
127 -DELIMITER ;  
128 --- 修改触发器  
129 -DELIMITER $$  
130 -CREATE TRIGGER syn_business_change AFTER UPDATE ON b_bustype  
131 -FOR EACH ROW  
132 -begin  
133 - IF NEW.isLeaf = 1 and OLD.isLeaf =1 THEN  
134 - UPDATE `itsm_demo`.`system_handler` SET `system_name` = NEW.busTypeName, `sort` = NEW.sort WHERE `system_id` = OLD.busId;  
135 - ELSE  
136 - DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;  
137 - END IF;  
138 -end$$  
139 -DELIMITER ;  
140 --- 删除触发器  
141 -DELIMITER $$  
142 -CREATE TRIGGER syn_business_delete AFTER DELETE ON b_bustype  
143 -FOR EACH ROW  
144 -begin  
145 - IF OLD.isLeaf = 1 THEN  
146 - DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;  
147 - END IF;  
148 -end$$  
149 -DELIMITER ; 117 +-- 9、触发器及其他
  118 + -- 1、流程表添加是否是虚拟字段
  119 + ALTER TABLE `itsm_demo`.`system_handler`
  120 + MODIFY COLUMN `isvirtual` varchar(1) NULL DEFAULT NULL COMMENT '是否虚拟 0:虚拟;1:正常' AFTER `enable`;
  121 + -- 2、文件类型的备注由个人保密协议变成入场资料
  122 + ALTER TABLE `cloud_backend_monitor`.`b_ops_file`
  123 + MODIFY COLUMN `type` int NULL DEFAULT NULL COMMENT '上传文件类型:10:入场资料,11:个人月度总结,21:月报,22:考勤记录,23:健康检查报告,31:文档资料,32:项目保密协议' AFTER `id`;
  124 + -- 乙方运维项目表添加是否是虚拟字段
  125 + ALTER TABLE `cloud_backend_monitor`.`b_ops_project`
  126 + ADD COLUMN `isvirtual` varchar(1) NULL COMMENT '是否虚拟 0:虚拟;1:正常' AFTER `enable`;
  127 + -- 3、同步流程业务添加触发器
  128 + -- 新增触发器
  129 + DELIMITER $$
  130 + CREATE TRIGGER syn_business_add AFTER INSERT ON b_bustype
  131 + FOR EACH ROW
  132 + begin
  133 + IF NEW.isLeaf = 1 THEN
  134 + INSERT INTO `itsm_demo`.`system_handler` (`system_id`, `system_name`, `sort`, `system_type`, `enable`,`isvirtual`) VALUES (NEW.busId, NEW.busTypeName, NEW.sort, "0",NEW.isUse,"1");
  135 + END IF;
  136 + end$$
  137 + DELIMITER ;
  138 +
  139 +
  140 + -- 修改触发器
  141 + DELIMITER $$
  142 + CREATE TRIGGER syn_business_change AFTER UPDATE ON b_bustype
  143 + FOR EACH ROW
  144 + begin
  145 + IF NEW.isLeaf = 1 and OLD.isLeaf =1 THEN
  146 + UPDATE `itsm_demo`.`system_handler` SET `system_name` = NEW.busTypeName, `enable`= NEW.isUse, `sort` = NEW.sort WHERE `system_id` = OLD.busId;
  147 + ELSE
  148 + DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;
  149 + END IF;
  150 + end$$
  151 + DELIMITER ;
  152 +
  153 + -- 删除触发器
  154 + DELIMITER $$
  155 + CREATE TRIGGER syn_business_delete AFTER DELETE ON b_bustype
  156 + FOR EACH ROW
  157 + begin
  158 + IF OLD.isLeaf = 1 THEN
  159 + DELETE FROM `itsm_demo`.`system_handler` where `system_id` = OLD.busId;
  160 + END IF;
  161 + end$$
  162 + DELIMITER ;
  163 +
  164 + -- 4、同步流程用户添加触发器 暂无删除触发器 如果有垃圾数据需要从库中sql进行删除
  165 + -- 新增触发器
  166 + DELIMITER $$
  167 + CREATE TRIGGER syn_person_add AFTER INSERT ON b_ops_project_person
  168 + FOR EACH ROW
  169 + begin
  170 + -- 根据插入的项目id获取业务id
  171 + select `busId` into @system_id_ from b_ops_project WHERE id = NEW.projectId;
  172 + -- 根据用户Id获取用户昵称、在职状态
  173 + select `nickname`,`state` INTO @user_name_,@enable_ from b_ops_person WHERE id = NEW.personId;
  174 + -- 插入用户信息
  175 + INSERT INTO `itsm_demo`.`system_handler_evaluate_user` (`system_id`, `user_id`, `user_name`, `enable`) VALUES (@system_id_, NEW.personId, @user_name_, @enable_);
  176 + end$$
  177 + DELIMITER ;
  178 +
  179 + -- 修改触发器
  180 + -- 如果修改用户表,修改流程用户
  181 + DELIMITER $$
  182 + CREATE TRIGGER syn_ops_person_change AFTER UPDATE ON b_ops_person
  183 + FOR EACH ROW
  184 + begin
  185 + -- 根据用户信息获取业务id
  186 + select DISTINCT(a.`busId`) into @system_id_ from b_ops_project a left JOIN b_ops_project_person b on a.id=b.projectId where b.personId=OLD.id;
  187 + -- 根据用户id修改流程用户信息
  188 + UPDATE `itsm_demo`.`system_handler_evaluate_user` SET `user_name` = NEW.nickname , `enable` = NEW.state WHERE `system_id` = @system_id_ and `user_id` = OLD.id;
  189 + end$$
  190 + DELIMITER ;
  191 +
  192 + -- 5、流程项目同步是否虚拟和是否乙方运维项目
  193 + -- 新增触发器 修改流程业务的是否乙方运维和是否虚拟
  194 + DELIMITER $$
  195 + CREATE TRIGGER syn_project_add AFTER INSERT ON b_ops_project
  196 + FOR EACH ROW
  197 + begin
  198 + -- 添加项目时修改是否乙方运维、是否虚拟
  199 + UPDATE `itsm_demo`.`system_handler` SET `system_type`=1 ,`isvirtual`=NEW.isvirtual WHERE `system_id` = NEW.busId;
  200 + end$$
  201 + DELIMITER ;
  202 +
  203 +
  204 + -- 修改触发器 修改流程业务的是否是虚拟
  205 + DELIMITER $$
  206 + CREATE TRIGGER syn_project_change AFTER UPDATE ON b_ops_project
  207 + FOR EACH ROW
  208 + begin
  209 + -- 相当于项目被隐藏
  210 + IF NEW.`enable` = 1 THEN
  211 + UPDATE `itsm_demo`.`system_handler` SET `system_type`=0 ,`isvirtual`=1 WHERE `system_id` = OLD.busId;
  212 + ELSE
  213 + -- 修改项目时修改是否是虚拟
  214 + UPDATE `itsm_demo`.`system_handler` SET `isvirtual`=NEW.isvirtual WHERE `system_id` = OLD.busId;
  215 + END IF;
  216 + end$$
  217 + DELIMITER ;
  218 +
  219 + -- 6、乙方运维项目表添加业务唯一键
  220 + ALTER TABLE `cloud_backend_monitor`.`b_ops_project`
  221 + ADD UNIQUE INDEX `busId_unique`(`busId`);
150 222
151 -- 10、手动把系统中的业务同步到流程的itsm_demo库中的system_handler表。且同步过来的业务只能是叶子业务,并且不能为虚拟业务 223 -- 10、手动把系统中的业务同步到流程的itsm_demo库中的system_handler表。且同步过来的业务只能是叶子业务,并且不能为虚拟业务
152 --(system_handler中system_id是业务id busId,system_type为乙方运维时,能在monitor库b_ops_project查到 关键字段 busId) 224 --(system_handler中system_id是业务id busId,system_type为乙方运维时,能在monitor库b_ops_project查到 关键字段 busId)
@@ -160,5 +232,11 @@ INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, @@ -160,5 +232,11 @@ INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`,
160 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_HEALTH', '0', '健康检查报告', '10005', 'FOUR_HEALTH', 'admin', '2021-10-12 19:55:13', '10005', 0); 232 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_HEALTH', '0', '健康检查报告', '10005', 'FOUR_HEALTH', 'admin', '2021-10-12 19:55:13', '10005', 0);
161 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_MONTHLY', '0', '月报', '10003', 'FOUR_MONTHLY', 'admin', '2021-10-12 19:55:13', '10003', 0); 233 INSERT INTO `inspection-report`.`b_insepectionreport_type` (`id`, `pid`, `name`, `docNo`, `type`, `createUser`, `createTime`, `sort`, `status`) VALUES ('FOUR_MONTHLY', '0', '月报', '10003', 'FOUR_MONTHLY', 'admin', '2021-10-12 19:55:13', '10003', 0);
162 234
163 --- 12、修改属性分组字段长度  
164 -ALTER TABLE `cloud_backend_monitor`.`b_ops_person_property` MODIFY COLUMN `groupings` VARCHAR(100) NULL COMMENT '分组'; 235 +-- 王涛 inspection-report
  236 +alter table b_inspection_document MODIFY column fileSize varchar(50) DEFAULT NULL COMMENT '文件大小';
  237 +
  238 +ALTER TABLE `inspection-report`.`b_inspection_document`
  239 +ADD COLUMN `status` int(1) DEFAULT '0' COMMENT '删除状态 0 正常,1删除,默认0';
  240 +
  241 +ALTER TABLE `inspection-report`.`b_insepectionreport_type`
  242 +ADD COLUMN `status` int(1) DEFAULT '0' COMMENT '删除状态 0 正常,1删除,默认0';
  1 +# 任务地址
  2 +[https://hgkj.5upm.com/task-view-72.html](任务地址)
  3 +
  4 +
  5 +
  6 +
  7 +## 涉及SQL
  8 +`V1015_1_乙方运维数据库设计SQL.txt`
  9 +
  10 +
  11 +## 涉及工程
  12 +> 1、hg-monitor-web-zj<br>
@@ -2569,6 +2569,19 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin', @@ -2569,6 +2569,19 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin',
2569 {field: 'resTypeName', title: '资源类型', minWidth: x_110, align: 'center'}, 2569 {field: 'resTypeName', title: '资源类型', minWidth: x_110, align: 'center'},
2570 {field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'} 2570 {field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'}
2571 ], 2571 ],
  2572 + "ARMS":[
  2573 + {
  2574 + field: 'resName', title: '资源名称', minWidth: x_300, sort: true,
  2575 + templet: '#resindex_resName'
  2576 + },
  2577 + {field: 'health', title: '健康状态', minWidth: x_110, align: 'center', sort: true, templet: '#healthTpl'},
  2578 + {field: 'lastColTime', title: '最近采集时间', minWidth: x_160, align: 'center', sort: true},
  2579 + {field: 'linkState', title: '连接状态', align: 'center', minWidth: x_110, templet: '#linkStateTpl', sort: true},
  2580 + {field: 'adminName', title: '负责人', minWidth: x_120, align: 'center', sort: true},
  2581 + {field: 'adminPhone', title: '负责人电话', minWidth: x_130, align: 'center', sort: true},
  2582 + {field: 'resTypeName', title: '资源类型', minWidth: x_110, align: 'center'},
  2583 + {field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'}
  2584 + ],
2572 }, 2585 },
2573 //列点击事件 2586 //列点击事件
2574 colsClickEvent: function (editFlag) { 2587 colsClickEvent: function (editFlag) {
  1 +layui.define(['commonDetail','common', 'admin'], function (exports) {
  2 + var $ = layui.$;
  3 + var commonDetail = layui.commonDetail;
  4 + var common = layui.common;
  5 + var admin = layui.admin;
  6 + //对外暴露的接口
  7 + exports('arms', function (data) {
  8 + var resId = '';
  9 + var resType = '';
  10 + var os = '';
  11 + var domainName = common.domainName;
  12 + var showFlag = common.getUrlParam("show");
  13 + if(showFlag && showFlag == '0'){
  14 + resId = common.getUrlParam("resId");
  15 + resType = common.getUrlParam("resType");
  16 + os = common.getUrlParam("os");
  17 + }else{
  18 + resId = data.resId;
  19 + resType = data.resType;
  20 + os = data.os;
  21 + }
  22 +
  23 + //基本信息
  24 + var jbxxKpi = "KPIE13DD9A3,KPIF74D9D2B";
  25 +
  26 + commonDetail.bindTips();
  27 +
  28 + renderPageInfo()
  29 +
  30 + //渲染页面
  31 + function renderPageInfo() {
  32 + //资源状态
  33 + commonDetail.renderResHealth("arms_health_state", resId);
  34 + //基本信息
  35 + commonDetail.renderText("arms_baseinfo", resId, jbxxKpi, null, null, null, "true");
  36 +
  37 + //GC瞬时次数/每分钟
  38 + dataRenderingBase("arms_frequency_lineChart", resId, "KPIB30309CF,KPI6AFFCBDB", "GC瞬时次数/每分钟", null);
  39 + // //GC瞬时耗时/每分钟
  40 + dataRenderingBase("arms_elapsed_lineChart", resId, "KPI5769F327,KPI8B2CCCCF", "GC瞬时耗时/每分钟", null);
  41 + // //堆内存详情/每分钟
  42 + dataRenderingBase("arms_JVM_memory_lineChart", resId, "KPI5C214A8F,KPI14BD24A7,KPI206706E5", "堆内存详情/每分钟", null);
  43 + // //非堆内存/每分钟
  44 + dataRenderingBase("arms_NOJVN_memory_lineChart", resId, "KPIA751DDD7,KPIB0C32458,KPIBEA62DAA,KPID346BB6F", "非堆内存/每分钟", null);
  45 + // //直接缓冲区/每分钟
  46 + dataRenderingBase("arms_cacheRegion_lineChart", resId, "KPIBAD64951,KPIA80D93D8", "直接缓冲区/每分钟", null);
  47 + // //JVM线程数/每分钟
  48 + dataRenderingBase("arms_JVM_threadCount_lineChart", resId, "KPI7C4BEB26,KPI97B71BAA,KPI15EC2627,KPIA9E2E4DE,KPI068D9FA5,KPI6ECA9036,KPI328E5AFE,KPI8F8FAD7F", "JVM线程数/每分钟", null, 1);
  49 +
  50 + //活动告警
  51 + commonDetail.renderActiveAlarms("arms_active_alram", resId);
  52 + }
  53 +
  54 + //折线图数据渲染及页面设置
  55 + function dataRenderingBase(id, resId, kpiId, title, flag) {
  56 + var dataList = {};
  57 + var item = {};
  58 + var other = {};
  59 + item.legend = {};
  60 + item.x = {};
  61 + item.y = {};
  62 + //获取数据
  63 + admin.req({
  64 + url: domainName + '/api-web/details/getBase',
  65 + data: {
  66 + resId: resId,
  67 + kpiIds: kpiId,
  68 + }
  69 + }).done(function (response) {
  70 + if (response.success && !response.msg) {//有数据
  71 + dataList.legend = response.map.legend;
  72 + dataList.x = response.map.x;
  73 + if (response.map.y != null && response.map.y.length === 1) {
  74 + dataList.y = response.map.y;
  75 + } else {
  76 + var series=[];
  77 + $.each(response.map.y, function (i, v) {
  78 + var lineIndex = Math.ceil(Math.random() * 6);
  79 + var item = {
  80 + name:dataList.legend[i],
  81 + stack:'Total',
  82 + type: 'line',
  83 + emphasis: {
  84 + focus: 'series'
  85 + },
  86 + itemStyle: {
  87 + normal: {
  88 + color: common.colorsArr[i%6].start
  89 + }
  90 + },
  91 + data: v,
  92 + };
  93 + series.push(item);
  94 + });
  95 + other["series"]=series;
  96 + }
  97 + initLinChart(id, resId, kpiId, title, flag, dataList, other);
  98 + } else {//无数据
  99 + //初始化数据
  100 + }
  101 + });
  102 + //页面渲染
  103 + return {item, other}
  104 + }
  105 + //初始化折线图
  106 + function initLinChart(id, resId, kpiId, title, flag, data, other) {
  107 + //初始化echarts
  108 + var myChart = echarts.init(document.getElementById(id));
  109 +
  110 + //初始化配置option
  111 + var option;
  112 + option = {
  113 + legend: {//设置图表图例
  114 + data: data.legend,
  115 + },
  116 + tooltip: {
  117 + trigger: 'axis',
  118 + },
  119 + toolbox: {
  120 + feature: {
  121 + saveAsImage: {}
  122 + }
  123 + },
  124 + xAxis: {//X轴数据
  125 + type: 'category',
  126 + boundaryGap: false,
  127 + data: data.x,
  128 + },
  129 + yAxis: {//设置提示
  130 + type: 'value'
  131 + },
  132 + grid: { //直角坐标系内绘图网格
  133 + left: '3%',
  134 + right: '4%',
  135 + bottom: '3%',
  136 + containLabel: true
  137 + },
  138 + series: [//y轴数据
  139 + {
  140 + data: data.y?data.y:{},
  141 + type: 'line',
  142 + smooth: true
  143 + }
  144 + ]
  145 + };
  146 + //获取传入option对象
  147 + var keys = Object.keys(other);
  148 + //替换option属性
  149 + keys.forEach(item => {
  150 + option[item]=other[item];
  151 + });
  152 + option && myChart.setOption(option);
  153 + }
  154 +
  155 +
  156 + //定时任务
  157 + var timer = setInterval(function () {
  158 + renderPageInfo()
  159 + },commonDetail.timerTime);
  160 + commonDetail.detailTimer.push(timer);
  161 + });
  162 +});
  1 +<!--arms详细页面-->
  2 +<article class="page-container template">
  3 + <div class="page-panel">
  4 + <div class="main">
  5 + <div class="layui-card template_detail_content">
  6 + <div class="layui-card-body">
  7 + <div class="lay-row">
  8 + <div class="lay-row-item">
  9 + <h5 class="lay-row-title">资源状态</h5>
  10 + <div class="res-state" id="arms_health_state"></div>
  11 + </div>
  12 + <div class="lay-row-item">
  13 + <h5 class="lay-row-title">堆内存详情/每分钟</h5>
  14 + <div id="arms_JVM_memory_lineChart" class="detail_line_chart"></div>
  15 + </div>
  16 + <div class="lay-row-item">
  17 + <h5 class="lay-row-title">JVM线程数/每分钟</h5>
  18 + <div id="arms_JVM_threadCount_lineChart" class="detail_line_chart"></div>
  19 + </div>
  20 + </div>
  21 + <div class="lay-row">
  22 + <div class="lay-row-item">
  23 + <h5 class="lay-row-title">GC瞬时次数/每分钟</h5>
  24 + <div id="arms_frequency_lineChart" class="detail_line_chart"></div>
  25 + </div>
  26 + <div class="lay-row-item">
  27 + <h5 class="lay-row-title">GC瞬时耗时/每分钟</h5>
  28 + <div id="arms_elapsed_lineChart" class="detail_line_chart"></div>
  29 + </div>
  30 + <div class="lay-row-item">
  31 + <h5 class="lay-row-title">非堆内存/每分钟</h5>
  32 + <div id="arms_NOJVN_memory_lineChart" class="detail_line_chart"></div>
  33 + </div>
  34 + <div class="lay-row-item">
  35 + <h5 class="lay-row-title">直接缓冲区/每分钟</h5>
  36 + <div id="arms_cacheRegion_lineChart" class="detail_line_chart"></div>
  37 + </div>
  38 + </div>
  39 + <div class="lay-row">
  40 + <div class="lay-row-item">
  41 + <h5 class="lay-row-title">实时告警动态</h5>
  42 + <div id="arms_active_alram"></div>
  43 + </div>
  44 + </div>
  45 + </div>
  46 + </div>
  47 + </div>
  48 + </div>
  49 +</article>
  50 +<textarea id="arms_param_id" style="display: none;">{{d}}</textarea>
  51 +<script>
  52 + layui.use('arms', function (fn) {
  53 + var $ = layui.$;
  54 + var parm = $("#arms_param_id").val();
  55 + if(parm.indexOf('{{d') != -1){
  56 + fn();
  57 + }else{
  58 + fn(JSON.parse(parm));
  59 + }
  60 + });
  61 +</script>