Commit 35f457e0 authored by QIANGLU's avatar QIANGLU
Browse files

优化线程池监控

parent dfaabdb4
Showing with 46 additions and 43 deletions
+46 -43
......@@ -7,10 +7,13 @@ import com.matrix.proxy.service.JdkCommandService;
import com.matrix.proxy.service.JvmDataService;
import com.matrix.proxy.vo.ThreadPoolCommandVo;
import com.matrix.proxy.vo.ThreadPoolQueryVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* 应用jvm相关接口
......@@ -30,12 +33,16 @@ public class JvmController {
/**
* 线程池列表
*
* @param instanceName
* @param instanceUid
* @return
*/
@RequestMapping("/threadPoolList")
public Page threadPoolPage(@RequestParam String instanceName) {
return jvmDataService.threadPoolDataPage(instanceName);
public Map<String,Object> threadPoolPage(@RequestParam String instanceUid, @RequestParam String dayTime) {
if(StringUtils.isEmpty(instanceUid)){
return new HashMap<>();
}
return jvmDataService.threadPoolDataPage(instanceUid,dayTime);
}
......
......@@ -7,6 +7,7 @@ import com.matrix.proxy.module.ThreadPoolVo;
import com.matrix.proxy.vo.ThreadPoolQueryVo;
import java.util.List;
import java.util.Map;
/**
* JVM数据采集服务
......@@ -18,8 +19,8 @@ public interface JvmDataService {
/**
* 线程池数据查询分页
*
* @param query
* @param instanceUid
* @return
*/
Page threadPoolDataPage(String instanceName);
Map<String,Object> threadPoolDataPage(String instanceUid, String dayTime);
}
......@@ -8,12 +8,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.matrix.proxy.entity.ThreadPoolEntity;
import com.matrix.proxy.mapper.ThreadPoolMapper;
import com.matrix.proxy.module.ThreadPoolVo;
import com.matrix.proxy.util.DateUtils;
import com.matrix.proxy.vo.ThreadPoolQueryVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
* JVM采集数据服务
......@@ -29,17 +30,26 @@ public class JvmDataServiceImpl implements JvmDataService {
/**
* 查询线程池数据分页
*
* @param instanceName
* @param instanceUid
* @return
*/
@Override
public Page threadPoolDataPage(String instanceName) {
Page<ThreadPoolEntity> page = new Page<>(1, 100);
public Map<String, Object> threadPoolDataPage(String instanceUid, String dayTime) {
IPage<ThreadPoolEntity> iPages = threadPoolMapper.selectPage(page, new QueryWrapper<>());
String[] appId = instanceUid.split("_");
String time =dayTime;
if(StringUtils.isEmpty(dayTime)){
time = DateUtils.getDateFormat(new Date(),"yyyy-MM-dd HH:mm");
}
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("instance_name", appId[0]);
queryWrapper.eq("instance_id", appId[1]);
queryWrapper.apply("date_format(create_time,'%Y-%m-%d %H:%i') = '" + time + "'");
List<ThreadPoolEntity> poolEntities = threadPoolMapper.selectList(queryWrapper);
List<ThreadPoolVo> vos = new ArrayList<>();
for (ThreadPoolEntity entity : iPages.getRecords()) {
for (ThreadPoolEntity entity : poolEntities) {
ThreadPoolVo.ThreadPoolVoBuilder builder = ThreadPoolVo.builder().threadPoolKey(entity.getThreadPoolKey()).createTime(entity.getCreateTime());
JSONObject params = JSON.parseObject(entity.getThreadPoolParams());
......@@ -54,10 +64,9 @@ public class JvmDataServiceImpl implements JvmDataService {
vos.add(builder.build());
}
Page pg = new Page();
pg.setTotal(iPages.getTotal());
pg.setRecords(vos);
pg.setPages(iPages.getPages());
return pg;
Map<String, Object> rs = new HashMap<>(16);
rs.put("total", poolEntities.size());
rs.put("records", vos);
return rs;
}
}
......@@ -31,8 +31,8 @@ spring:
mybatis-plus:
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/**/*.xml
server:
......
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel="icon" href="/favicon.ico"><title>Vue Admin Template</title><link href="/css/chunk-elementUI.50ef77dc.css" rel="stylesheet"><link href="/css/chunk-libs.ae060808.css" rel="stylesheet"><link href="/css/app.287816c0.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but Vue Admin Template doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script>(function(e){function t(t){for(var r,c,a=t[0],f=t[1],i=t[2],l=0,d=[];l<a.length;l++)c=a[l],Object.prototype.hasOwnProperty.call(o,c)&&o[c]&&d.push(o[c][0]),o[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);s&&s(t);while(d.length)d.shift()();return u.push.apply(u,i||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,c=1;c<n.length;c++){var a=n[c];0!==o[a]&&(r=!1)}r&&(u.splice(t--,1),e=f(f.s=n[0]))}return e}var r={},c={runtime:0},o={runtime:0},u=[];function a(e){return f.p+"js/"+({}[e]||e)+"."+{"chunk-0ff64412":"c7d7f8b3","chunk-41d0c458":"4fb2f919","chunk-51b3fcfe":"cf6a2c72","chunk-543fab76":"2aeca346","chunk-6b6982bf":"dea128ea","chunk-76cea4de":"0aace4b7","chunk-f7e485f0":"0adc6d9a","chunk-2d0cf506":"5cdee307"}[e]+".js"}function f(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,f),n.l=!0,n.exports}f.e=function(e){var t=[],n={"chunk-0ff64412":1,"chunk-41d0c458":1,"chunk-543fab76":1,"chunk-76cea4de":1,"chunk-f7e485f0":1};c[e]?t.push(c[e]):0!==c[e]&&n[e]&&t.push(c[e]=new Promise((function(t,n){for(var r="css/"+({}[e]||e)+"."+{"chunk-0ff64412":"35440867","chunk-41d0c458":"ac715b79","chunk-51b3fcfe":"31d6cfe0","chunk-543fab76":"09a9ef9c","chunk-6b6982bf":"31d6cfe0","chunk-76cea4de":"05c30f40","chunk-f7e485f0":"567152e6","chunk-2d0cf506":"31d6cfe0"}[e]+".css",o=f.p+r,u=document.getElementsByTagName("link"),a=0;a<u.length;a++){var i=u[a],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===o))return t()}var d=document.getElementsByTagName("style");for(a=0;a<d.length;a++){i=d[a],l=i.getAttribute("data-href");if(l===r||l===o)return t()}var s=document.createElement("link");s.rel="stylesheet",s.type="text/css",s.onload=t,s.onerror=function(t){var r=t&&t.target&&t.target.src||o,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete c[e],s.parentNode.removeChild(s),n(u)},s.href=o;var h=document.getElementsByTagName("head")[0];h.appendChild(s)})).then((function(){c[e]=0})));var r=o[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=u);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=a(e);var d=new Error;i=function(t){l.onerror=l.onload=null,clearTimeout(s);var n=o[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",d.name="ChunkLoadError",d.type=r,d.request=c,n[1](d)}o[e]=void 0}};var s=setTimeout((function(){i({type:"timeout",target:l})}),12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(t)},f.m=e,f.c=r,f.d=function(e,t,n){f.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,t){if(1&t&&(e=f(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(f.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)f.d(n,r,function(t){return e[t]}.bind(null,r));return n},f.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(t,"a",t),t},f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.p="/",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var d=0;d<i.length;d++)t(i[d]);var s=l;n()})([]);</script><script src="/js/chunk-elementUI.61c46ad7.js"></script><script src="/js/chunk-libs.bf0a4428.js"></script><script src="/js/app.2f7edc6a.js"></script></body></html>
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel="icon" href="/favicon.ico"><title>Vue Admin Template</title><link href="/css/chunk-elementUI.50ef77dc.css" rel="stylesheet"><link href="/css/chunk-libs.ae060808.css" rel="stylesheet"><link href="/css/app.96293e42.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but Vue Admin Template doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-elementUI.61c46ad7.js"></script><script src="/js/chunk-libs.644c1062.js"></script><script>(function(e){function t(t){for(var r,c,a=t[0],f=t[1],i=t[2],l=0,d=[];l<a.length;l++)c=a[l],u[c]&&d.push(u[c][0]),u[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);h&&h(t);while(d.length)d.shift()();return o.push.apply(o,i||[]),n()}function n(){for(var e,t=0;t<o.length;t++){for(var n=o[t],r=!0,c=1;c<n.length;c++){var a=n[c];0!==u[a]&&(r=!1)}r&&(o.splice(t--,1),e=f(f.s=n[0]))}return e}var r={},c={runtime:0},u={runtime:0},o=[];function a(e){return f.p+"js/"+({}[e]||e)+"."+{"chunk-07b73813":"c2b2922c","chunk-0ff64412":"e60c1e3a","chunk-41d0c458":"e4f5ee87","chunk-53ac0620":"ec00ef52","chunk-76cea4de":"aa7561a6","chunk-7d3f72e2":"cb220bcb","chunk-543fab76":"c3a419b1","chunk-f7e485f0":"0adc6d9a","chunk-2d0cf506":"ee33139d"}[e]+".js"}function f(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,f),n.l=!0,n.exports}f.e=function(e){var t=[],n={"chunk-0ff64412":1,"chunk-41d0c458":1,"chunk-76cea4de":1,"chunk-543fab76":1,"chunk-f7e485f0":1};c[e]?t.push(c[e]):0!==c[e]&&n[e]&&t.push(c[e]=new Promise((function(t,n){for(var r="css/"+({}[e]||e)+"."+{"chunk-07b73813":"31d6cfe0","chunk-0ff64412":"678ee75d","chunk-41d0c458":"b3390f4a","chunk-53ac0620":"31d6cfe0","chunk-76cea4de":"3cfeabf2","chunk-7d3f72e2":"31d6cfe0","chunk-543fab76":"0cd82f98","chunk-f7e485f0":"567152e6","chunk-2d0cf506":"31d6cfe0"}[e]+".css",u=f.p+r,o=document.getElementsByTagName("link"),a=0;a<o.length;a++){var i=o[a],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===u))return t()}var d=document.getElementsByTagName("style");for(a=0;a<d.length;a++){i=d[a],l=i.getAttribute("data-href");if(l===r||l===u)return t()}var h=document.createElement("link");h.rel="stylesheet",h.type="text/css",h.onload=t,h.onerror=function(t){var r=t&&t.target&&t.target.src||u,o=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");o.code="CSS_CHUNK_LOAD_FAILED",o.request=r,delete c[e],h.parentNode.removeChild(h),n(o)},h.href=u;var s=document.getElementsByTagName("head")[0];s.appendChild(h)})).then((function(){c[e]=0})));var r=u[e];if(0!==r)if(r)t.push(r[2]);else{var o=new Promise((function(t,n){r=u[e]=[t,n]}));t.push(r[2]=o);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=a(e),i=function(t){l.onerror=l.onload=null,clearTimeout(d);var n=u[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src,o=new Error("Loading chunk "+e+" failed.\n("+r+": "+c+")");o.type=r,o.request=c,n[1](o)}u[e]=void 0}};var d=setTimeout((function(){i({type:"timeout",target:l})}),12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(t)},f.m=e,f.c=r,f.d=function(e,t,n){f.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,t){if(1&t&&(e=f(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(f.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)f.d(n,r,function(t){return e[t]}.bind(null,r));return n},f.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(t,"a",t),t},f.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},f.p="/",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var d=0;d<i.length;d++)t(i[d]);var h=l;n()})([]);</script><script src="/js/app.cc3b664f.js"></script></body></html>
\ No newline at end of file
......@@ -11,14 +11,11 @@
/>
<span style="float: right;padding: 4px 10px">
<el-date-picker
v-model="searchForm.date"
:picker-options="pickerOptions"
v-model="secondDateTime"
type="datetime"
size="mini"
placeholder="时间"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss"
align="right"
placeholder="选择日期时间"
value-format="yyyy-MM-dd HH:mm"
/>
<el-button
class="filter-item"
......@@ -78,20 +75,22 @@
<script>
import {appList, getAppNames, getInstanceNames, threadPoolList} from '@/api/list'
import moment from "moment";
// arr to obj, such as { CN : "China", US : "USA" }
export default {
name: 'List',
data() {
return {
total: '',
instanceUid: '',
instanceName: '',
instanceUidOption: [],
appOption: [],
search: '',
tableData: [],
listLoading: true,
searchForm: {
date: null
},
secondDateTime: moment().subtract(1, 'm').format('YYYY-MM-DD HH:mm'),
dialogVisible: false,
drawerVisible: false,
sort: 'id_desc',
......@@ -147,7 +146,6 @@ export default {
},
instanceUidChange(val) {
this.$cookies.set("instanceUid", val)
this.getInstanceDetail({appId: val})
},
appChange(val) {
this.instanceName = val;
......@@ -160,25 +158,13 @@ export default {
this.listLoading = true
let _this;
_this = this;
threadPoolList({ instanceName: this.instanceName }).then(response => {
console.log(response.data)
threadPoolList({ instanceUid: _this.instanceUid, dayTime: _this.secondDateTime }).then(response => {
_this.tableData = response.data.records
_this.total = response.data.total
}).finally(() => {
this.listLoading = false
})
},
// handleFilter() {
// this.listQuery.page = 1
// this.getList()
// },
// handleModifyStatus(row, status) {
// this.$message({
// message: '操作Success',
// type: 'success'
// })
// row.status = status
// },
sortChange(data) {
const { prop, order } = data
if (prop === 'id') {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment