This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nezha-fronted/nezha-fronted/src/components/common/project/meta2d/js/topoUtil.js

135 lines
4.8 KiB
JavaScript
Raw Normal View History

2023-02-16 16:33:20 +08:00
import { getTopology, setTopology, dealImg, topologyImg } from '@/components/common/js/common'
2023-02-20 14:25:09 +08:00
import bus from '@/libs/bus'
import axios from 'axios'
2023-02-16 16:33:20 +08:00
export default {
methods: {
topoResize (id) {
getTopology(id).resize()
},
initEdit (id) {
getTopology(id).lock(0)
getTopology(id).stopAnimate(getTopology(id).data.pens)
2023-02-20 14:25:09 +08:00
console.log(getTopology(id).data.pens)
if (getTopology(id).data.pens) {
getTopology(id).data.pens.forEach(item => {
this.calcNode(item)
})
}
getTopology(id).render()
getTopology(id).centerView()
},
calcNode (node) { // 处理节点数据
node = { ...node, ...node.data.params }
getTopology(this.meta2dId)._setValue(node)
},
getQueryValues (elements, startTime, endTime) {
this.meta2dLoading = true
return new Promise(resolve => {
const step = bus.getStep(startTime, endTime)
endTime = parseInt(endTime / 1000)
startTime = parseInt(startTime / 1000)
const urlPre = '/prom'
console.log(endTime, startTime)
elements = elements.filter(item => item.state && item.expression)
const requests = elements.map((element) => {
// query_range
let query = `${urlPre}/api/v1/query_range?start=${startTime}&end=${endTime}&step=${step}`
query += `&nullType=${'null'}`
if (element.filter) {
query += `&filter=${element.filter}`
}
query += `&query=${encodeURIComponent(element.expression)}`
return this.$get(query)
})
axios.all(requests).then((res) => {
console.log(res)
const arr = []
res.forEach((request, index) => {
arr.push({
type: 'title',
name: elements[index].name
})
if (request.code === 200 && request.status === 'success') {
request.data.result.forEach((r, rindex) => {
let legend = ''
if (!r.metric) {
r.metric = {}
}
if (r.metric.__name__) {
legend += `${r.metric.__name__}{`
}
const tagKeysArr = Object.keys(r.metric)
tagKeysArr.forEach(tagKey => {
if (tagKey !== '__name__' && tagKey !== 'legend' && tagKey !== 'values' && tagKey !== '$value') {
legend += `${tagKey}="${r.metric[tagKey]}",`
}
})
if (legend.endsWith(',')) {
legend = legend.substr(0, legend.length - 1)
}
if (r.metric.__name__) {
legend += '}'
}
if (!legend && elements) {
legend = elements[index].expression
}
const obj = {
type: 'item',
id: rindex + elements[index].name + JSON.stringify(r.metric),
name: this.handleLegendAlias(legend, elements[index].legend, r.metric),
values: r.values
}
arr.push(obj)
})
}
})
this.meta2dLoading = false
this.$store.dispatch('dispatchSetQueryValues', arr)
resolve(arr)
})
})
},
handleLegendAlias (legend, aliasExpression, params) {
const self = this
const myParams = JSON.parse(JSON.stringify(params))
myParams.$labels = JSON.parse(JSON.stringify(params))
myParams.$value = myParams.value
if (/\{\{.+\}\}/.test(aliasExpression)) {
const labelValue = aliasExpression.replace(/(\{\{.+?\}\})/g, function (i) {
const label = i.substr(i.indexOf('{{') + 2, i.indexOf('}}') - i.indexOf('{{') - 2)
if (!legend) {
return label
}
let value = null
if (params && self.$loadsh.get(myParams, label)) {
value = self.$loadsh.get(myParams, label)
}
if (label) {
const reg = new RegExp(label + '=".+?"', 'g')
if (reg.test(legend)) {
const ans = legend.match(reg)
let find = ''
ans.forEach(item => {
const index = legend.indexOf(item)
if (legend[index - 1] !== '_') {
find = item
}
})
value = find.substr(find.indexOf('"') + 1, find.lastIndexOf('"') - find.indexOf('"') - 1)
}
}
return value || ''
})
return labelValue
} else {
if (!aliasExpression) {
return legend
// let result =legend.substr(legend.indexOf('"') + 1,legend.lastIndexOf('"') - legend.indexOf('"') - 1);
// return result
}
return aliasExpression
}
2023-02-16 16:33:20 +08:00
}
}
}