|
|
@ -2,6 +2,7 @@ |
|
|
|
const moment = require('moment'); |
|
|
|
const diskinfo = require('diskinfo'); |
|
|
|
const os = require('os-utils'); |
|
|
|
const request = require("superagent"); |
|
|
|
|
|
|
|
function getNodeResources(opts) { |
|
|
|
return async function (ctx, next) { |
|
|
@ -90,8 +91,73 @@ function getDataTotalTop5(opts) { |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function queryToken_(ctx) { |
|
|
|
let rslt = null; |
|
|
|
try { |
|
|
|
const { k8s } = ctx; |
|
|
|
const params = { |
|
|
|
grant_type: 'password', |
|
|
|
username: 'admin', |
|
|
|
password: 'Fashion123', |
|
|
|
client_id: 'kubesphere', |
|
|
|
client_secret: 'kubesphere', |
|
|
|
} |
|
|
|
const url = k8s + '/oauth/token' |
|
|
|
rslt = await request.post(url).send(params) |
|
|
|
.set('Content-Type', 'application/x-www-form-urlencoded') |
|
|
|
|
|
|
|
return (rslt || {}).body || null; |
|
|
|
} catch (err) { |
|
|
|
throw err |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
function mathRound(use, total) { |
|
|
|
return Math.round(parseFloat(use) / parseFloat(total) * 1000) / 10 |
|
|
|
} |
|
|
|
|
|
|
|
function getClusterInfo(opts) { |
|
|
|
return async function (ctx, next) { |
|
|
|
const { k8s } = opts; |
|
|
|
let errMsg = { message: '获取节点资源失败' } |
|
|
|
try { |
|
|
|
const token = await queryToken_(opts); |
|
|
|
const url = k8s + '/kapis/monitoring.kubesphere.io/v1alpha3/cluster?metrics_filter=cluster_cpu_usage%7Ccluster_cpu_total%7Ccluster_memory_usage_wo_cache%7Ccluster_memory_total%7Ccluster_disk_size_usage%7Ccluster_disk_size_capacity%7Ccluster_pod_running_count%7Ccluster_pod_quota%24' |
|
|
|
let res = await request.get(url) |
|
|
|
.set('Authorization', `Bearer ${token.access_token}`) |
|
|
|
.set('Content-Type', 'application/json;charset=utf-8'); |
|
|
|
if (res.body && res.body.results) { |
|
|
|
let results = res.body.results; |
|
|
|
let cpuUsage = ((results.find(s => s.metric_name == 'cluster_cpu_usage') || {}).data || {}).result[0].value[1]; |
|
|
|
let cpuTotal = ((results.find(s => s.metric_name == 'cluster_cpu_total') || {}).data || {}).result[0].value[1]; |
|
|
|
let diskUsage = ((results.find(s => s.metric_name == 'cluster_disk_size_usage') || {}).data || {}).result[0].value[1]; |
|
|
|
let diskTotal = ((results.find(s => s.metric_name == 'cluster_disk_size_capacity') || {}).data || {}).result[0].value[1]; |
|
|
|
let memoryUsage = ((results.find(s => s.metric_name == 'cluster_memory_usage_wo_cache') || {}).data || {}).result[0].value[1]; |
|
|
|
let memoryTotal = ((results.find(s => s.metric_name == 'cluster_memory_total') || {}).data || {}).result[0].value[1]; |
|
|
|
ctx.status = 200; |
|
|
|
ctx.body = { |
|
|
|
cpu: mathRound(cpuUsage, cpuTotal), |
|
|
|
disk: mathRound(diskUsage, diskTotal), |
|
|
|
memory: mathRound(memoryUsage, memoryTotal), |
|
|
|
}; |
|
|
|
} else { |
|
|
|
ctx.status = 400; |
|
|
|
ctx.body = errMsg; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} catch (error) { |
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); |
|
|
|
ctx.status = 400; |
|
|
|
ctx.body = errMsg |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|
getNodeResources, |
|
|
|
getDataTotalTop5 |
|
|
|
|
|
|
|
getDataTotalTop5, |
|
|
|
getClusterInfo |
|
|
|
} |
|
|
|