修复:保留监控缺测语义、采样日期与磁盘字段名称
This commit is contained in:
1 parent
520c0894c2
commit
6a07904ca0
7 files changed
+726
-71
No files matched your search
@@ -32,6 +32,7 @@ import { r as configuration_display_r } from "~/lib/configuration-display.js";
|
||||
import { t as configuration_display_t } from "~/lib/configuration-display.js";
|
||||
import { t as common_advanced_rules_t } from "~/lib/common-advanced-rules.js";
|
||||
import multiselect from "openvue/multiselect";
|
||||
import { t as finance_resource_chart_t } from "~/lib/finance-resource-chart.js";
|
||||
var j = (e) => (e && typeof e == `object` && !Array.isArray(e) ? e : {}),
|
||||
M = (e) => e === !0 || e === 1 || e === `1`,
|
||||
N = (e) => e === !1 || e === 0 || e === `0`,
|
||||
@@ -163,12 +164,7 @@ function z(e) {
|
||||
name: a[t] || `数据 ${t + 1}`,
|
||||
type: `line`,
|
||||
showSymbol: !1,
|
||||
data: c.map((e) => {
|
||||
let t = n.get(e);
|
||||
return t != null && t !== `` && Number.isFinite(Number(t))
|
||||
? Number(t)
|
||||
: null;
|
||||
}),
|
||||
data: c.map((e) => finance_resource_chart_t(n.get(e))),
|
||||
};
|
||||
});
|
||||
return {
|
||||
|
||||
@@ -26,6 +26,8 @@ import button from "openvue/button";
|
||||
import { t as _plugin_vue_export_helper_t } from "~/lib/_plugin-vue_export-helper.js";
|
||||
import skeleton from "openvue/skeleton";
|
||||
import selectbutton from "openvue/selectbutton";
|
||||
import { r as dict_r } from "~/lib/dict.js";
|
||||
import { t as finance_resource_chart_t } from "~/lib/finance-resource-chart.js";
|
||||
var T = defineAsyncComponent(() =>
|
||||
loadModule(
|
||||
() => import("~/components/ChartBox.vue").then((e) => e.default || e),
|
||||
@@ -113,8 +115,10 @@ var T = defineAsyncComponent(() =>
|
||||
start_time: Math.floor(Date.now() / 1e3) - S.value,
|
||||
});
|
||||
if (R || e !== L || t !== h.hostId || n !== h.module) return;
|
||||
((F.value = (Array.isArray(r.list) ? r.list : []).filter((e) =>
|
||||
Number.isFinite(Number(e.time)),
|
||||
((F.value = (Array.isArray(r.list) ? r.list : []).filter(
|
||||
(e) =>
|
||||
finance_resource_chart_t(e.time) !== null &&
|
||||
Number.isFinite(new Date(Number(e.time) * 1e3).getTime()),
|
||||
)),
|
||||
(I.value = typeof r.unit == `string` ? r.unit : ``));
|
||||
} catch (t) {
|
||||
@@ -126,12 +130,8 @@ var T = defineAsyncComponent(() =>
|
||||
}
|
||||
}
|
||||
// 缺失采样转为 null 而不是 0,配合 connectNulls:false 保留采集中断的空隙。
|
||||
function V(e) {
|
||||
return e != null && e !== `` && Number.isFinite(Number(e))
|
||||
? Number(e)
|
||||
: null;
|
||||
}
|
||||
let H = computed(() =>
|
||||
let V = finance_resource_chart_t,
|
||||
H = computed(() =>
|
||||
F.value.some((e) => V(e.in_bw) !== null || V(e.out_bw) !== null),
|
||||
),
|
||||
U = computed(() => ({
|
||||
@@ -150,12 +150,10 @@ var T = defineAsyncComponent(() =>
|
||||
xAxis: {
|
||||
type: `category`,
|
||||
boundaryGap: !1,
|
||||
data: F.value.map((e) =>
|
||||
new Date(Number(e.time) * 1e3).toLocaleTimeString(`zh-CN`, {
|
||||
hour: `2-digit`,
|
||||
minute: `2-digit`,
|
||||
}),
|
||||
),
|
||||
data: F.value.map((e) => dict_r(Number(e.time))),
|
||||
axisLabel: {
|
||||
formatter: (e) => String(e).slice(11, 16),
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: `value`,
|
||||
|
||||
@@ -1055,13 +1055,14 @@ var ge = [`aria-busy`],
|
||||
createElementVNode(`div`, ke, [
|
||||
(n[17] ||= createElementVNode(
|
||||
`label`,
|
||||
null,
|
||||
{ for: `disk-resize-capacity` },
|
||||
`扩容至`,
|
||||
-1,
|
||||
)),
|
||||
createVNode(
|
||||
fe,
|
||||
{
|
||||
inputId: `disk-resize-capacity`,
|
||||
modelValue: unref(P),
|
||||
"onUpdate:modelValue": [
|
||||
(n[1] ||= (e) =>
|
||||
@@ -1232,13 +1233,14 @@ var ge = [`aria-busy`],
|
||||
createElementVNode(`div`, Fe, [
|
||||
(n[21] ||= createElementVNode(
|
||||
`label`,
|
||||
null,
|
||||
{ for: `disk-add-capacity` },
|
||||
`容量`,
|
||||
-1,
|
||||
)),
|
||||
createVNode(
|
||||
fe,
|
||||
{
|
||||
inputId: `disk-add-capacity`,
|
||||
modelValue: unref(B),
|
||||
"onUpdate:modelValue": [
|
||||
(n[5] ||= (e) =>
|
||||
|
||||
@@ -30,6 +30,7 @@ import ListSegments from "~/components/ListSegments.vue";
|
||||
import skeleton from "openvue/skeleton";
|
||||
import { n as finance_resource_chart_n } from "~/lib/finance-resource-chart.js";
|
||||
import { t as finance_resource_chart_t } from "~/lib/finance-resource-chart.js";
|
||||
import { r as dict_r } from "~/lib/dict.js";
|
||||
var O = defineAsyncComponent(() =>
|
||||
loadModule(
|
||||
() => import("~/components/ChartBox.vue").then((e) => e.default || e),
|
||||
@@ -125,8 +126,10 @@ var O = defineAsyncComponent(() =>
|
||||
],
|
||||
Z = ref(86400),
|
||||
Q = (e) => {
|
||||
let t = new Date(e * 1e3);
|
||||
return `${String(t.getHours()).padStart(2, `0`)}:${String(t.getMinutes()).padStart(2, `0`)}`;
|
||||
let t = finance_resource_chart_t(e);
|
||||
return t !== null && Number.isFinite(new Date(t * 1e3).getTime())
|
||||
? dict_r(t)
|
||||
: ``;
|
||||
};
|
||||
async function te(e, t, n = `mf_cloud`) {
|
||||
// 云模块各指标并行读取并分别展示失败;物理智简只请求实际支持的带宽图。
|
||||
@@ -151,10 +154,13 @@ var O = defineAsyncComponent(() =>
|
||||
pick: [
|
||||
{
|
||||
name: `内存`,
|
||||
fn: (e) =>
|
||||
e.total
|
||||
? (Number(e.used ?? 0) / Number(e.total)) * 100
|
||||
: void 0,
|
||||
fn: (e) => {
|
||||
let t = finance_resource_chart_t(e.total),
|
||||
n = finance_resource_chart_t(e.used);
|
||||
return t !== null && t > 0 && n !== null
|
||||
? (n / t) * 100
|
||||
: null;
|
||||
},
|
||||
color: U.value,
|
||||
unit: `%`,
|
||||
},
|
||||
@@ -228,10 +234,7 @@ var O = defineAsyncComponent(() =>
|
||||
};
|
||||
let r = n.value.list ?? [],
|
||||
a = e.pick.map((e) =>
|
||||
r.map((t) => {
|
||||
let n = e.fn(t);
|
||||
return n === void 0 || Number.isNaN(n) ? null : Number(n);
|
||||
}),
|
||||
r.map((t) => finance_resource_chart_t(e.fn(t))),
|
||||
),
|
||||
s =
|
||||
e.scale === `bits`
|
||||
@@ -317,9 +320,7 @@ var O = defineAsyncComponent(() =>
|
||||
],
|
||||
};
|
||||
}
|
||||
let a = (r.list?.[0] ?? []).map((e) =>
|
||||
String(e.time ?? ``).slice(11, 16),
|
||||
),
|
||||
let a = (r.list?.[0] ?? []).map((e) => String(e.time ?? ``)),
|
||||
o = (r.list ?? []).map((e, t) => ({
|
||||
name: String(r.label?.[t] ?? `系列 ${t + 1}`).replace(
|
||||
/\(.*\)$/,
|
||||
@@ -341,9 +342,7 @@ var O = defineAsyncComponent(() =>
|
||||
async function re(e) {
|
||||
// 快快云监控时间范围由接口决定,带宽值按其既有口径从千分单位转换为 Mbps。
|
||||
let t = await y.get(`/kky_ecs/monitor/${e}`),
|
||||
n = (t.sample_info ?? []).map((e) =>
|
||||
String(e.timestamp ?? ``).slice(11, 16),
|
||||
),
|
||||
n = (t.sample_info ?? []).map((e) => String(e.timestamp ?? ``)),
|
||||
r = (e, t, r, i, a, o = 1) => ({
|
||||
key: e,
|
||||
title: t,
|
||||
@@ -352,9 +351,10 @@ var O = defineAsyncComponent(() =>
|
||||
name: e.title,
|
||||
unit: a,
|
||||
color: i[t % i.length],
|
||||
data: (e.value ?? []).map((e) =>
|
||||
typeof e == `number` ? Number((e / o).toFixed(2)) : null,
|
||||
),
|
||||
data: (e.value ?? []).map((e) => {
|
||||
let t = finance_resource_chart_t(e);
|
||||
return t === null ? null : Number((t / o).toFixed(2));
|
||||
}),
|
||||
})),
|
||||
});
|
||||
return [
|
||||
@@ -448,6 +448,7 @@ var O = defineAsyncComponent(() =>
|
||||
axisLabel: {
|
||||
color: t,
|
||||
fontSize: 11,
|
||||
formatter: (e) => String(e).slice(11, 16),
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
|
||||
@@ -43,6 +43,7 @@ import FlowPacketPanel from "~/components/instance/FlowPacketPanel.vue";
|
||||
import InstanceStatusTag from "~/components/instance/InstanceStatusTag.vue";
|
||||
import InstanceTraffic from "~/components/instance/InstanceTraffic.vue";
|
||||
import { n as finance_resource_chart_n } from "~/lib/finance-resource-chart.js";
|
||||
import { t as finance_resource_chart_t } from "~/lib/finance-resource-chart.js";
|
||||
var le = defineAsyncComponent(() =>
|
||||
loadModule(
|
||||
() => import("~/components/ChartBox.vue").then((e) => e.default || e),
|
||||
@@ -293,13 +294,8 @@ var le = defineAsyncComponent(() =>
|
||||
),
|
||||
K = 0,
|
||||
q = !1;
|
||||
function J(e) {
|
||||
if (typeof e != `number` && (typeof e != `string` || !e.trim()))
|
||||
return null;
|
||||
let t = Number(e);
|
||||
return Number.isFinite(t) ? t : null;
|
||||
}
|
||||
let xt = (e) => (e.status === `fulfilled` ? e.value : null),
|
||||
let J = finance_resource_chart_t,
|
||||
xt = (e) => (e.status === `fulfilled` ? e.value : null),
|
||||
St = (e) => (e instanceof Error ? e.message : `网络监控加载失败`);
|
||||
async function Y() {
|
||||
// 不同模块的监控时间单位和返回结构不同,分支完成协议转换;实例切换后拒绝旧响应。
|
||||
@@ -374,7 +370,7 @@ var le = defineAsyncComponent(() =>
|
||||
(e) => {
|
||||
H.value = {
|
||||
labels: (e?.list?.[0] ?? []).map((e) =>
|
||||
String(e.time ?? ``).slice(11, 16),
|
||||
String(e.time ?? ``),
|
||||
),
|
||||
unit: e?.unit?.trim() || ``,
|
||||
series: (e?.list ?? []).map((t, n) => ({
|
||||
@@ -474,8 +470,11 @@ var le = defineAsyncComponent(() =>
|
||||
: 0;
|
||||
H.value = {
|
||||
labels: t.map((e) => {
|
||||
let t = new Date(e.time * 1e3);
|
||||
return `${String(t.getHours()).padStart(2, `0`)}:${String(t.getMinutes()).padStart(2, `0`)}`;
|
||||
let t = J(e.time);
|
||||
return t !== null &&
|
||||
Number.isFinite(new Date(t * 1e3).getTime())
|
||||
? dict_r(t)
|
||||
: ``;
|
||||
}),
|
||||
unit: [`bps`, `Kbps`, `Mbps`, `Gbps`, `Tbps`][i],
|
||||
series: n.map((e, t) => ({
|
||||
@@ -498,32 +497,34 @@ var le = defineAsyncComponent(() =>
|
||||
]);
|
||||
if (!r()) return;
|
||||
let n = xt(e);
|
||||
z.value = n?.cpu?.[0]?.value ?? [];
|
||||
z.value = (n?.cpu?.[0]?.value ?? []).map(J);
|
||||
let i = n?.memory?.find((e) => !/free/i.test(e.name)),
|
||||
a = n?.memory?.find((e) => /free/i.test(e.name));
|
||||
((B.value =
|
||||
i && a
|
||||
? i.value.map((e, t) => {
|
||||
let n = Number(a.value?.[t] ?? 0);
|
||||
return e > 0
|
||||
? Math.max(0, Math.min(100, ((e - n) / e) * 100))
|
||||
: 0;
|
||||
let n = J(a.value?.[t]),
|
||||
r = J(e);
|
||||
return r !== null && r > 0 && n !== null
|
||||
? Math.max(0, Math.min(100, ((r - n) / r) * 100))
|
||||
: null;
|
||||
})
|
||||
: []),
|
||||
e.status === `rejected`
|
||||
? (W.value = St(e.reason))
|
||||
: (H.value = {
|
||||
labels: (n?.sample_info ?? []).map((e) =>
|
||||
String(e.timestamp ?? ``).slice(11, 16),
|
||||
String(e.timestamp ?? ``),
|
||||
),
|
||||
unit: `Mbps`,
|
||||
series: (n?.bandwidth ?? []).map((e, t) => ({
|
||||
name: e.title || e.name || `带宽系列 ${t + 1}`,
|
||||
data: (e.value ?? []).map((e) =>
|
||||
typeof e == `number` && Number.isFinite(e)
|
||||
? Number((e / 1e3).toFixed(2))
|
||||
: null,
|
||||
),
|
||||
data: (e.value ?? []).map((e) => {
|
||||
let t = J(e);
|
||||
return t === null
|
||||
? null
|
||||
: Number((t / 1e3).toFixed(2));
|
||||
}),
|
||||
})),
|
||||
}));
|
||||
}
|
||||
@@ -546,23 +547,19 @@ var le = defineAsyncComponent(() =>
|
||||
x.module === `jy_cloud` || x.module === `jy_dcim`
|
||||
? (J(R.value?.cpu_usage) ?? z.value.at(-1) ?? null)
|
||||
: x.module === `mf_cloud` || x.module === `remf_cloud`
|
||||
? X(R.value?.cpu_usage)
|
||||
? J(R.value?.cpu_usage)
|
||||
: z.value.length
|
||||
? z.value[z.value.length - 1]
|
||||
: x.module === `remf_finance`
|
||||
? null
|
||||
: 0,
|
||||
: null,
|
||||
),
|
||||
wt = computed(() =>
|
||||
x.module === `jy_cloud` || x.module === `jy_dcim`
|
||||
? (J(R.value?.memory_usage) ?? B.value.at(-1) ?? null)
|
||||
: x.module === `mf_cloud` || x.module === `remf_cloud`
|
||||
? X(R.value?.memory_usage)
|
||||
? J(R.value?.memory_usage)
|
||||
: B.value.length
|
||||
? B.value[B.value.length - 1]
|
||||
: x.module === `remf_finance`
|
||||
? null
|
||||
: 0,
|
||||
: null,
|
||||
);
|
||||
function Tt(e) {
|
||||
// CPU/内存趋势以百分比绘制;null 表示缺测,禁止连接缺失点伪造连续数据。
|
||||
|
||||
@@ -15,7 +15,7 @@ function t(t, n) {
|
||||
? null
|
||||
: Number(Math.min(100, Math.max(0, n)).toFixed(2));
|
||||
},
|
||||
s = (e) => e.map((e) => String(e.time ?? ``).slice(11, 16));
|
||||
s = (e) => e.map((e) => String(e.time ?? ``));
|
||||
if (n === `cpu` || /%|percent/i.test(t.unit ?? ``)) {
|
||||
let e = r[n === `memory` && a >= 0 ? a : 0] ?? [];
|
||||
return {
|
||||
|
||||
Reference in new issue
Block a user