@topdatasec/probe 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/t-probe-ui.es.js +231 -232
- package/lib/t-probe-ui.umd.js +1 -1
- package/package.json +1 -1
package/lib/t-probe-ui.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as W, useModel as de, resolveComponent as c, openBlock as h, createElementBlock as x, Fragment as z, renderList as G, createVNode as
|
|
1
|
+
import { defineComponent as W, useModel as de, resolveComponent as c, openBlock as h, createElementBlock as x, Fragment as z, renderList as G, createVNode as e, withCtx as b, unref as F, createCommentVNode as K, ref as w, reactive as H, createTextVNode as E, createElementVNode as p, toDisplayString as q, normalizeClass as te, withModifiers as le, mergeProps as oe, onUnmounted as pe, createBlock as Q } from "vue";
|
|
2
2
|
import { CircleClose as ce, UploadFilled as me } from "@element-plus/icons-vue";
|
|
3
3
|
import { TdsTable as _e, TdsForm as re } from "topdatasec-ui";
|
|
4
4
|
import ye from "spark-md5";
|
|
@@ -18,33 +18,33 @@ const fe = {
|
|
|
18
18
|
function a() {
|
|
19
19
|
o.value = [...o.value, { ip: "", port: "" }];
|
|
20
20
|
}
|
|
21
|
-
function m(
|
|
21
|
+
function m(y) {
|
|
22
22
|
const r = [...o.value];
|
|
23
|
-
r.splice(
|
|
23
|
+
r.splice(y, 1), o.value = r;
|
|
24
24
|
}
|
|
25
|
-
return (
|
|
26
|
-
const v = c("el-input"), k = c("el-form-item"), g = c("el-icon"),
|
|
25
|
+
return (y, r) => {
|
|
26
|
+
const v = c("el-input"), k = c("el-form-item"), g = c("el-icon"), i = c("el-button");
|
|
27
27
|
return h(), x("div", null, [
|
|
28
|
-
(h(!0), x(z, null, G(o.value, (
|
|
28
|
+
(h(!0), x(z, null, G(o.value, (_, U) => (h(), x("div", {
|
|
29
29
|
key: U,
|
|
30
30
|
class: "flex form-m0 w-100% mb-5px"
|
|
31
31
|
}, [
|
|
32
|
-
|
|
32
|
+
e(k, { class: "w-70%" }, {
|
|
33
33
|
default: b(() => [
|
|
34
|
-
|
|
35
|
-
modelValue:
|
|
36
|
-
"onUpdate:modelValue": (M) =>
|
|
34
|
+
e(v, {
|
|
35
|
+
modelValue: _.ip,
|
|
36
|
+
"onUpdate:modelValue": (M) => _.ip = M,
|
|
37
37
|
class: "min-w-300px w-100%",
|
|
38
38
|
placeholder: "IP"
|
|
39
39
|
}, null, 8, ["modelValue", "onUpdate:modelValue"])
|
|
40
40
|
]),
|
|
41
41
|
_: 2
|
|
42
42
|
}, 1024),
|
|
43
|
-
|
|
43
|
+
e(k, { class: "ml-auto w-30%" }, {
|
|
44
44
|
default: b(() => [
|
|
45
|
-
|
|
46
|
-
modelValue:
|
|
47
|
-
"onUpdate:modelValue": (M) =>
|
|
45
|
+
e(v, {
|
|
46
|
+
modelValue: _.port,
|
|
47
|
+
"onUpdate:modelValue": (M) => _.port = M,
|
|
48
48
|
class: "ml-10",
|
|
49
49
|
placeholder: F(n)("global.port")
|
|
50
50
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])
|
|
@@ -52,17 +52,17 @@ const fe = {
|
|
|
52
52
|
_: 2
|
|
53
53
|
}, 1024),
|
|
54
54
|
o.value.length > 1 ? (h(), x("div", fe, [
|
|
55
|
-
|
|
55
|
+
e(g, {
|
|
56
56
|
onClick: (M) => m(U)
|
|
57
57
|
}, {
|
|
58
58
|
default: b(() => [
|
|
59
|
-
|
|
59
|
+
e(F(ce))
|
|
60
60
|
]),
|
|
61
61
|
_: 1
|
|
62
62
|
}, 8, ["onClick"])
|
|
63
63
|
])) : K("", !0)
|
|
64
64
|
]))), 128)),
|
|
65
|
-
|
|
65
|
+
e(i, {
|
|
66
66
|
class: "w-100% mt-10px border-dashed!",
|
|
67
67
|
icon: "Plus",
|
|
68
68
|
onClick: a
|
|
@@ -76,49 +76,49 @@ const ne = (l, o) => {
|
|
|
76
76
|
for (const [a, m] of o)
|
|
77
77
|
n[a] = m;
|
|
78
78
|
return n;
|
|
79
|
-
}, P = /* @__PURE__ */ ne(ve, [["__scopeId", "data-v-16fc9c64"]]), V =
|
|
79
|
+
}, P = /* @__PURE__ */ ne(ve, [["__scopeId", "data-v-16fc9c64"]]), V = 4 * 1024 * 1024;
|
|
80
80
|
function ge(l, o) {
|
|
81
81
|
return new Promise((n, a) => {
|
|
82
|
-
const m = new ye.ArrayBuffer(),
|
|
82
|
+
const m = new ye.ArrayBuffer(), y = new FileReader(), r = Math.ceil(l.size / V);
|
|
83
83
|
let v = 0;
|
|
84
|
-
|
|
85
|
-
var
|
|
86
|
-
if (m.append((
|
|
87
|
-
const
|
|
88
|
-
o(
|
|
84
|
+
y.onload = (g) => {
|
|
85
|
+
var i;
|
|
86
|
+
if (m.append((i = g.target) == null ? void 0 : i.result), v++, o) {
|
|
87
|
+
const _ = Math.floor(v / r * 100);
|
|
88
|
+
o(_);
|
|
89
89
|
}
|
|
90
90
|
if (v < r)
|
|
91
91
|
k();
|
|
92
92
|
else {
|
|
93
|
-
const
|
|
94
|
-
n(
|
|
93
|
+
const _ = m.end();
|
|
94
|
+
n(_);
|
|
95
95
|
}
|
|
96
|
-
},
|
|
96
|
+
}, y.onerror = () => {
|
|
97
97
|
a(new Error("MD5计算失败"));
|
|
98
98
|
};
|
|
99
99
|
function k() {
|
|
100
|
-
const g = v * V,
|
|
101
|
-
|
|
100
|
+
const g = v * V, i = Math.min(g + V, l.size);
|
|
101
|
+
y.readAsArrayBuffer(l.slice(g, i));
|
|
102
102
|
}
|
|
103
103
|
k();
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
|
-
async function he(l, o, n, a, m,
|
|
107
|
-
const r = o * V, v = Math.min(r + V, l.size), k = l.slice(r, v), g = v - r,
|
|
108
|
-
|
|
106
|
+
async function he(l, o, n, a, m, y = "/api/upload/chunk") {
|
|
107
|
+
const r = o * V, v = Math.min(r + V, l.size), k = l.slice(r, v), g = v - r, i = new FormData();
|
|
108
|
+
i.append("file", k, l.name), i.append("chunkIndex", String(o + 1)), i.append("totalChunkNum", String(n)), i.append("fileMd5", a), i.append("tds_token", m), i.append("fileName", l.name), i.append("fileSize", String(l.size)), i.append("fileExt", l.name.substring(l.name.lastIndexOf(".") + 1)), i.append("chunkSize", String(V)), i.append("currentChunkSize", String(g));
|
|
109
109
|
try {
|
|
110
|
-
const
|
|
110
|
+
const _ = await fetch(y, {
|
|
111
111
|
method: "POST",
|
|
112
|
-
body:
|
|
112
|
+
body: i
|
|
113
113
|
});
|
|
114
|
-
if (console.log(
|
|
115
|
-
throw new Error(`分片 ${o + 1} 上传失败,HTTP状态码: ${
|
|
116
|
-
const U = await
|
|
114
|
+
if (console.log(_, "upload response"), !_.ok)
|
|
115
|
+
throw new Error(`分片 ${o + 1} 上传失败,HTTP状态码: ${_.status}`);
|
|
116
|
+
const U = await _.json();
|
|
117
117
|
if (console.log(U, "upload result"), U.recode !== 0)
|
|
118
118
|
throw new Error(`上传失败: ${U.remsg || "未知错误"}`);
|
|
119
119
|
return !0;
|
|
120
|
-
} catch (
|
|
121
|
-
throw console.error(`上传分片 ${o + 1} 时出错:`,
|
|
120
|
+
} catch (_) {
|
|
121
|
+
throw console.error(`上传分片 ${o + 1} 时出错:`, _), _;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
async function be(l, o = "/api/upload/merge") {
|
|
@@ -137,14 +137,14 @@ async function be(l, o = "/api/upload/merge") {
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
async function we(l) {
|
|
140
|
-
const { token: o, file: n, fileDesc: a = "", uploadUrl: m = "/api/upload/chunk", mergeUrl:
|
|
140
|
+
const { token: o, file: n, fileDesc: a = "", uploadUrl: m = "/api/upload/chunk", mergeUrl: y = "/api/upload/merge", onProgress: r, onSuccess: v, onError: k } = l;
|
|
141
141
|
try {
|
|
142
142
|
r == null || r({
|
|
143
143
|
progress: 0,
|
|
144
144
|
statusText: "正在计算文件MD5...",
|
|
145
145
|
status: "preparing"
|
|
146
146
|
});
|
|
147
|
-
const
|
|
147
|
+
const i = await ge(n, (S) => {
|
|
148
148
|
r == null || r({
|
|
149
149
|
progress: Math.floor(S * 0.1),
|
|
150
150
|
// MD5计算占10%进度
|
|
@@ -156,47 +156,47 @@ async function we(l) {
|
|
|
156
156
|
progress: 10,
|
|
157
157
|
statusText: "MD5计算完成",
|
|
158
158
|
status: "preparing",
|
|
159
|
-
fileMd5:
|
|
159
|
+
fileMd5: i
|
|
160
160
|
});
|
|
161
|
-
const
|
|
161
|
+
const _ = Math.ceil(n.size / V);
|
|
162
162
|
r == null || r({
|
|
163
163
|
progress: 10,
|
|
164
|
-
statusText: `开始上传 (共${
|
|
164
|
+
statusText: `开始上传 (共${_}个分片)`,
|
|
165
165
|
status: "uploading",
|
|
166
|
-
fileMd5:
|
|
166
|
+
fileMd5: i
|
|
167
167
|
});
|
|
168
|
-
for (let S = 0; S <
|
|
169
|
-
const I = Math.floor(S /
|
|
168
|
+
for (let S = 0; S < _; S++) {
|
|
169
|
+
const I = Math.floor(S / _ * 80);
|
|
170
170
|
r == null || r({
|
|
171
171
|
progress: 10 + I,
|
|
172
|
-
statusText: `正在上传分片 ${S + 1}/${
|
|
172
|
+
statusText: `正在上传分片 ${S + 1}/${_}`,
|
|
173
173
|
status: "uploading",
|
|
174
|
-
fileMd5:
|
|
175
|
-
}), await he(n, S,
|
|
174
|
+
fileMd5: i
|
|
175
|
+
}), await he(n, S, _, i, o, m);
|
|
176
176
|
}
|
|
177
177
|
r == null || r({
|
|
178
178
|
progress: 90,
|
|
179
179
|
statusText: "正在合并文件...",
|
|
180
180
|
status: "merging",
|
|
181
|
-
fileMd5:
|
|
181
|
+
fileMd5: i
|
|
182
182
|
});
|
|
183
183
|
const U = n.name.substring(n.name.lastIndexOf(".") + 1), M = {
|
|
184
184
|
fileDesc: a,
|
|
185
185
|
fileExt: U,
|
|
186
|
-
fileMd5:
|
|
186
|
+
fileMd5: i,
|
|
187
187
|
fileName: n.name,
|
|
188
188
|
fileSize: String(n.size),
|
|
189
189
|
tds_token: o,
|
|
190
|
-
totalChunkNum: String(
|
|
190
|
+
totalChunkNum: String(_)
|
|
191
191
|
};
|
|
192
|
-
if (!await be(M,
|
|
192
|
+
if (!await be(M, y))
|
|
193
193
|
throw new Error("文件合并失败");
|
|
194
194
|
r == null || r({
|
|
195
195
|
progress: 100,
|
|
196
196
|
statusText: "上传成功",
|
|
197
197
|
status: "success",
|
|
198
|
-
fileMd5:
|
|
199
|
-
}), ee.success(`${n.name} 上传成功`), v == null || v(
|
|
198
|
+
fileMd5: i
|
|
199
|
+
}), ee.success(`${n.name} 上传成功`), v == null || v(i);
|
|
200
200
|
} catch (g) {
|
|
201
201
|
r == null || r({
|
|
202
202
|
progress: 0,
|
|
@@ -329,71 +329,71 @@ const $ = {
|
|
|
329
329
|
},
|
|
330
330
|
setup(l) {
|
|
331
331
|
const o = w(), n = w(), a = w("快速部署"), m = w({}), {
|
|
332
|
-
$t:
|
|
332
|
+
$t: y,
|
|
333
333
|
$messageBox: r
|
|
334
334
|
} = window, v = l;
|
|
335
|
-
function k(
|
|
335
|
+
function k(u) {
|
|
336
336
|
m.value = {
|
|
337
|
-
id:
|
|
337
|
+
id: u.id
|
|
338
338
|
}, n.value.open();
|
|
339
339
|
}
|
|
340
340
|
const g = w([{
|
|
341
341
|
ip: "",
|
|
342
342
|
port: ""
|
|
343
|
-
}]),
|
|
343
|
+
}]), i = w([{
|
|
344
344
|
ip: "",
|
|
345
345
|
port: ""
|
|
346
|
-
}]),
|
|
346
|
+
}]), _ = w([{
|
|
347
347
|
ip: "",
|
|
348
348
|
port: ""
|
|
349
349
|
}]), U = w([{
|
|
350
350
|
ip: "",
|
|
351
351
|
port: ""
|
|
352
352
|
}]);
|
|
353
|
-
async function M(
|
|
354
|
-
const f = (A,
|
|
355
|
-
const
|
|
353
|
+
async function M(u) {
|
|
354
|
+
const f = (A, t) => {
|
|
355
|
+
const s = Math.max(A.length, t.length);
|
|
356
356
|
return Array.from({
|
|
357
|
-
length:
|
|
357
|
+
length: s
|
|
358
358
|
}, (B, L) => {
|
|
359
359
|
var d, T, j, D;
|
|
360
360
|
return {
|
|
361
361
|
src_ip: ((d = A[L]) == null ? void 0 : d.ip) || "",
|
|
362
362
|
src_port: Number((T = A[L]) == null ? void 0 : T.port) || 0,
|
|
363
|
-
dst_ip: ((j =
|
|
364
|
-
dst_port: Number((D =
|
|
363
|
+
dst_ip: ((j = t[L]) == null ? void 0 : j.ip) || "",
|
|
364
|
+
dst_port: Number((D = t[L]) == null ? void 0 : D.port) || 0
|
|
365
365
|
};
|
|
366
366
|
});
|
|
367
367
|
}, N = {
|
|
368
368
|
packages_id: [m.value.id],
|
|
369
|
-
server_id:
|
|
369
|
+
server_id: u.server_id,
|
|
370
370
|
service_type: window.$prodType,
|
|
371
371
|
deploy_params: {
|
|
372
|
-
probe_name:
|
|
373
|
-
collection_mode:
|
|
374
|
-
interface:
|
|
375
|
-
engine_ip:
|
|
376
|
-
engine_port:
|
|
377
|
-
filterWhitelist: f(g.value,
|
|
378
|
-
filterBlacklist: f(
|
|
372
|
+
probe_name: u.probe_name || "",
|
|
373
|
+
collection_mode: u.collection_mode,
|
|
374
|
+
interface: u.interface || "",
|
|
375
|
+
engine_ip: u.engine_ip || "",
|
|
376
|
+
engine_port: u.engine_port || "",
|
|
377
|
+
filterWhitelist: f(g.value, i.value),
|
|
378
|
+
filterBlacklist: f(_.value, U.value)
|
|
379
379
|
}
|
|
380
380
|
};
|
|
381
381
|
await ae({
|
|
382
382
|
data: N
|
|
383
383
|
}), o.value.getTableList(), n.value.close();
|
|
384
384
|
}
|
|
385
|
-
async function O(
|
|
386
|
-
r(
|
|
387
|
-
const f =
|
|
385
|
+
async function O(u) {
|
|
386
|
+
r(u, "file_name", y("button.delete"), "error").then(async () => {
|
|
387
|
+
const f = u.map((N) => N.id);
|
|
388
388
|
await Le({
|
|
389
389
|
data: f
|
|
390
390
|
}), o.value.getTableList();
|
|
391
391
|
});
|
|
392
392
|
}
|
|
393
|
-
async function S(
|
|
394
|
-
r(
|
|
393
|
+
async function S(u) {
|
|
394
|
+
r("是否卸载该探针", "", "卸载", "error").then(async () => {
|
|
395
395
|
await ue({
|
|
396
|
-
deploy_id: [
|
|
396
|
+
deploy_id: [u.id],
|
|
397
397
|
service_type: window.$prodType
|
|
398
398
|
}), o.value.getTableList();
|
|
399
399
|
});
|
|
@@ -441,9 +441,9 @@ const $ = {
|
|
|
441
441
|
{
|
|
442
442
|
field: "deployment_server",
|
|
443
443
|
name: "已部署服务器数",
|
|
444
|
-
render: (
|
|
444
|
+
render: (u) => {
|
|
445
445
|
var f;
|
|
446
|
-
return ((f =
|
|
446
|
+
return ((f = u.row.deployment_server) == null ? void 0 : f.length) || 0;
|
|
447
447
|
}
|
|
448
448
|
},
|
|
449
449
|
{
|
|
@@ -531,20 +531,20 @@ const $ = {
|
|
|
531
531
|
show: {
|
|
532
532
|
type: "input",
|
|
533
533
|
tooltip: "白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",
|
|
534
|
-
render: () =>
|
|
534
|
+
render: () => e(z, null, [e("div", {
|
|
535
535
|
style: "width: 100%"
|
|
536
|
-
}, [
|
|
536
|
+
}, [e("p", {
|
|
537
537
|
class: "color-[var(--el-text-color-regular)]"
|
|
538
|
-
}, [E("源ip端口:")]),
|
|
538
|
+
}, [E("源ip端口:")]), e(P, {
|
|
539
539
|
modelValue: g.value,
|
|
540
|
-
"onUpdate:modelValue": (
|
|
541
|
-
}, null)]),
|
|
540
|
+
"onUpdate:modelValue": (u) => g.value = u
|
|
541
|
+
}, null)]), e("div", {
|
|
542
542
|
style: "width: 100%"
|
|
543
|
-
}, [
|
|
543
|
+
}, [e("p", {
|
|
544
544
|
class: "color-[var(--el-text-color-regular)]"
|
|
545
|
-
}, [E("目的ip端口:")]),
|
|
546
|
-
modelValue:
|
|
547
|
-
"onUpdate:modelValue": (
|
|
545
|
+
}, [E("目的ip端口:")]), e(P, {
|
|
546
|
+
modelValue: i.value,
|
|
547
|
+
"onUpdate:modelValue": (u) => i.value = u
|
|
548
548
|
}, null)])])
|
|
549
549
|
},
|
|
550
550
|
hide: !0
|
|
@@ -555,16 +555,16 @@ const $ = {
|
|
|
555
555
|
show: {
|
|
556
556
|
type: "input",
|
|
557
557
|
tooltip: "黑名单配置后,将不再采集黑名单内相关流量",
|
|
558
|
-
render: () =>
|
|
558
|
+
render: () => e(z, null, [e("p", {
|
|
559
559
|
class: "color-[var(--el-text-color-regular)]"
|
|
560
|
-
}, [E("源ip端口:")]),
|
|
561
|
-
modelValue:
|
|
562
|
-
"onUpdate:modelValue": (
|
|
563
|
-
}, null),
|
|
560
|
+
}, [E("源ip端口:")]), e(P, {
|
|
561
|
+
modelValue: _.value,
|
|
562
|
+
"onUpdate:modelValue": (u) => _.value = u
|
|
563
|
+
}, null), e("p", {
|
|
564
564
|
class: "color-[var(--el-text-color-regular)]"
|
|
565
|
-
}, [E("目的ip端口:")]),
|
|
565
|
+
}, [E("目的ip端口:")]), e(P, {
|
|
566
566
|
modelValue: U.value,
|
|
567
|
-
"onUpdate:modelValue": (
|
|
567
|
+
"onUpdate:modelValue": (u) => U.value = u
|
|
568
568
|
}, null)])
|
|
569
569
|
},
|
|
570
570
|
hide: !0
|
|
@@ -574,27 +574,27 @@ const $ = {
|
|
|
574
574
|
name: window.$t("global.operate"),
|
|
575
575
|
width: 140,
|
|
576
576
|
fixed: "right",
|
|
577
|
-
render: (
|
|
577
|
+
render: (u) => e("div", null, [e(c("el-button"), {
|
|
578
578
|
link: !0,
|
|
579
579
|
type: "primary",
|
|
580
580
|
class: "custom-btn",
|
|
581
|
-
onClick: () => k(
|
|
581
|
+
onClick: () => k(u.row)
|
|
582
582
|
}, {
|
|
583
|
-
icon: () =>
|
|
583
|
+
icon: () => e(c("tds-svg-icon"), {
|
|
584
584
|
name: "deployed",
|
|
585
585
|
tip: "部署"
|
|
586
586
|
}, null)
|
|
587
|
-
}),
|
|
587
|
+
}), e(c("el-button"), {
|
|
588
588
|
link: !0,
|
|
589
589
|
type: "danger",
|
|
590
590
|
icon: "Delete",
|
|
591
|
-
title:
|
|
592
|
-
onClick: () => O([
|
|
591
|
+
title: y("button.delete"),
|
|
592
|
+
onClick: () => O([u.row])
|
|
593
593
|
}, null)])
|
|
594
594
|
}
|
|
595
595
|
]), R = w([]);
|
|
596
|
-
function J(
|
|
597
|
-
const f =
|
|
596
|
+
function J(u) {
|
|
597
|
+
const f = u.raw;
|
|
598
598
|
if (!f)
|
|
599
599
|
return;
|
|
600
600
|
const N = {
|
|
@@ -614,30 +614,30 @@ const $ = {
|
|
|
614
614
|
mergeUrl: $.deployURL + "/service_deploy/deployment/packages/upload_merge",
|
|
615
615
|
token: v.token,
|
|
616
616
|
// 进度回调
|
|
617
|
-
onProgress: (
|
|
618
|
-
const
|
|
619
|
-
|
|
617
|
+
onProgress: (t) => {
|
|
618
|
+
const s = R.value[A];
|
|
619
|
+
s && (s.progress = t.progress, s.statusText = t.statusText, t.fileMd5 && (s.fileMd5 = t.fileMd5), t.status === "error" ? s.progressStatus = "exception" : t.status === "success" ? s.progressStatus = "success" : s.progressStatus = "");
|
|
620
620
|
},
|
|
621
621
|
// 成功回调
|
|
622
622
|
onSuccess: () => {
|
|
623
|
-
var
|
|
624
|
-
const
|
|
625
|
-
|
|
623
|
+
var s;
|
|
624
|
+
const t = R.value[A];
|
|
625
|
+
t && (t.progress = 100, t.progressStatus = "success", t.statusText = "上传成功"), (s = o.value) == null || s.getTableList(), setTimeout(() => {
|
|
626
626
|
const B = R.value.findIndex((L) => L.fileName === f.name);
|
|
627
627
|
B !== -1 && R.value.splice(B, 1);
|
|
628
628
|
}, 3e3);
|
|
629
629
|
},
|
|
630
630
|
// 失败回调
|
|
631
|
-
onError: (
|
|
632
|
-
console.error("文件上传失败:",
|
|
633
|
-
const
|
|
634
|
-
|
|
631
|
+
onError: (t) => {
|
|
632
|
+
console.error("文件上传失败:", t);
|
|
633
|
+
const s = R.value[A];
|
|
634
|
+
s && (s.progressStatus = "exception", s.statusText = t.message || "上传失败");
|
|
635
635
|
}
|
|
636
636
|
});
|
|
637
637
|
}
|
|
638
|
-
return (
|
|
639
|
-
const N = c("el-icon"), A = c("el-upload"),
|
|
640
|
-
return h(), x("div", De, [
|
|
638
|
+
return (u, f) => {
|
|
639
|
+
const N = c("el-icon"), A = c("el-upload"), t = c("el-progress"), s = c("Delete"), B = c("el-button"), L = c("el-table-column");
|
|
640
|
+
return h(), x("div", De, [e(A, {
|
|
641
641
|
class: "upload-demo mt-10px",
|
|
642
642
|
drag: "",
|
|
643
643
|
action: "",
|
|
@@ -647,10 +647,10 @@ const $ = {
|
|
|
647
647
|
"show-file-list": !1,
|
|
648
648
|
multiple: ""
|
|
649
649
|
}, {
|
|
650
|
-
default: b(() => [
|
|
650
|
+
default: b(() => [e(N, {
|
|
651
651
|
class: "el-icon--upload"
|
|
652
652
|
}, {
|
|
653
|
-
default: b(() => [
|
|
653
|
+
default: b(() => [e(F(me))]),
|
|
654
654
|
_: 1
|
|
655
655
|
}), f[0] || (f[0] = p("div", {
|
|
656
656
|
class: "el-upload__text"
|
|
@@ -659,17 +659,17 @@ const $ = {
|
|
|
659
659
|
}), R.value.length > 0 ? (h(), x("div", Re, [(h(!0), x(z, null, G(R.value, (d) => (h(), x("div", {
|
|
660
660
|
key: d.fileName,
|
|
661
661
|
class: "upload-progress-item"
|
|
662
|
-
}, [p("div", Fe, [p("span", ze, q(d.fileName), 1), p("span", Ne, q(F(xe)(d.fileSize)), 1)]), t
|
|
662
|
+
}, [p("div", Fe, [p("span", ze, q(d.fileName), 1), p("span", Ne, q(F(xe)(d.fileSize)), 1)]), e(t, {
|
|
663
663
|
percentage: d.progress,
|
|
664
664
|
status: d.progressStatus
|
|
665
|
-
}, null, 8, ["percentage", "status"]), p("div", Be, q(d.statusText), 1)]))), 128))])) : K("", !0), p("div", Ie, [
|
|
665
|
+
}, null, 8, ["percentage", "status"]), p("div", Be, q(d.statusText), 1)]))), 128))])) : K("", !0), p("div", Ie, [e(F(_e), {
|
|
666
666
|
ref_key: "refTdsTable",
|
|
667
667
|
ref: o,
|
|
668
668
|
columns: I,
|
|
669
669
|
"request-api": F(se),
|
|
670
|
-
options:
|
|
670
|
+
options: u.$tableOptions()
|
|
671
671
|
}, {
|
|
672
|
-
default: b(() => [
|
|
672
|
+
default: b(() => [e(L, {
|
|
673
673
|
type: "expand"
|
|
674
674
|
}, {
|
|
675
675
|
default: b((d) => [d.row.deployment_server && d.row.deployment_server.length > 0 ? (h(), x("div", Pe, [f[4] || (f[4] = p("div", {
|
|
@@ -683,20 +683,20 @@ const $ = {
|
|
|
683
683
|
"text-amber-600 bg-amber-50 border-amber-200": T.deploy_type === 1,
|
|
684
684
|
"text-red-600 bg-red-50 border-red-200": T.deploy_type === 2
|
|
685
685
|
}])
|
|
686
|
-
}, q(T.deploy_type === 0 ? "
|
|
686
|
+
}, q(T.deploy_type === 0 ? "第一次安装" : T.deploy_type === 1 ? "升级" : "卸载"), 3), p("div", Oe, q(T.server_name), 1), p("div", je, [p("p", Ke, [f[1] || (f[1] = p("span", {
|
|
687
687
|
class: "opacity-70 mr-2"
|
|
688
688
|
}, "IP:", -1)), E(" " + q(T.ip_address), 1)]), p("p", He, [f[2] || (f[2] = p("span", {
|
|
689
689
|
class: "opacity-70 mr-2"
|
|
690
|
-
}, "时间:", -1)), E(" " + q(T.deployment_time), 1)])]), p("div", We, [
|
|
690
|
+
}, "时间:", -1)), E(" " + q(T.deployment_time), 1)])]), p("div", We, [e(B, {
|
|
691
691
|
type: "danger",
|
|
692
692
|
circle: "",
|
|
693
693
|
class: "mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",
|
|
694
694
|
onClick: le((j) => S(T), ["stop"])
|
|
695
695
|
}, {
|
|
696
|
-
default: b(() => [
|
|
696
|
+
default: b(() => [e(N, {
|
|
697
697
|
size: "20"
|
|
698
698
|
}, {
|
|
699
|
-
default: b(() => [
|
|
699
|
+
default: b(() => [e(s)]),
|
|
700
700
|
_: 1
|
|
701
701
|
})]),
|
|
702
702
|
_: 1
|
|
@@ -706,10 +706,10 @@ const $ = {
|
|
|
706
706
|
_: 1
|
|
707
707
|
})]),
|
|
708
708
|
_: 1
|
|
709
|
-
}, 8, ["columns", "request-api", "options"])]),
|
|
709
|
+
}, 8, ["columns", "request-api", "options"])]), e(F(re), oe({
|
|
710
710
|
ref_key: "refTdsForm",
|
|
711
711
|
ref: n
|
|
712
|
-
},
|
|
712
|
+
}, u.$formBindProps({
|
|
713
713
|
title: a.value,
|
|
714
714
|
form: m.value,
|
|
715
715
|
columns: I
|
|
@@ -745,29 +745,29 @@ const $ = {
|
|
|
745
745
|
const {
|
|
746
746
|
$t: o,
|
|
747
747
|
$messageBox: n
|
|
748
|
-
} = window, a = w(), m = w(),
|
|
748
|
+
} = window, a = w(), m = w(), y = w(""), r = w({}), v = w("show"), k = H({
|
|
749
749
|
service_type: window.$prodType
|
|
750
750
|
});
|
|
751
|
-
function g(
|
|
752
|
-
r.value =
|
|
751
|
+
function g(t) {
|
|
752
|
+
r.value = t ? Object.assign({}, t) : {}, v.value = "show", y.value = t ? "修改服务器" : "添加服务器", m.value.open();
|
|
753
753
|
}
|
|
754
|
-
const
|
|
755
|
-
n(
|
|
754
|
+
const i = (t) => {
|
|
755
|
+
n(t, "server_name", o("button.delete"), "error").then(async () => {
|
|
756
756
|
await $e({
|
|
757
|
-
data:
|
|
757
|
+
data: t.map((s) => s.id),
|
|
758
758
|
service_type: window.$prodType
|
|
759
759
|
}), a.value.getTableList();
|
|
760
760
|
});
|
|
761
761
|
};
|
|
762
|
-
function
|
|
762
|
+
function _(t) {
|
|
763
763
|
r.value = {
|
|
764
|
-
id:
|
|
765
|
-
}, v.value = "deploy",
|
|
764
|
+
id: t.id
|
|
765
|
+
}, v.value = "deploy", y.value = "快速部署", m.value.open();
|
|
766
766
|
}
|
|
767
|
-
async function U(
|
|
768
|
-
n(
|
|
767
|
+
async function U(t) {
|
|
768
|
+
n("是否卸载该探针", "", "卸载", "error").then(async () => {
|
|
769
769
|
await ue({
|
|
770
|
-
deploy_id: [
|
|
770
|
+
deploy_id: [t.id],
|
|
771
771
|
service_type: window.$prodType
|
|
772
772
|
}), a.value.getTableList();
|
|
773
773
|
});
|
|
@@ -785,15 +785,15 @@ const $ = {
|
|
|
785
785
|
ip: "",
|
|
786
786
|
port: ""
|
|
787
787
|
}]);
|
|
788
|
-
async function R(
|
|
788
|
+
async function R(t) {
|
|
789
789
|
if (v.value === "show") {
|
|
790
790
|
r.value.id ? (await Te({
|
|
791
791
|
data: {
|
|
792
|
-
...
|
|
792
|
+
...t,
|
|
793
793
|
id: r.value.id
|
|
794
794
|
}
|
|
795
795
|
}), a.value.getTableList(), m.value.close()) : (await ke({
|
|
796
|
-
data:
|
|
796
|
+
data: t
|
|
797
797
|
}), a.value.getTableList(), m.value.close());
|
|
798
798
|
return;
|
|
799
799
|
}
|
|
@@ -802,7 +802,7 @@ const $ = {
|
|
|
802
802
|
password: "Tds@12345",
|
|
803
803
|
username: "admin"
|
|
804
804
|
}), d = new FormData();
|
|
805
|
-
d.append("Name",
|
|
805
|
+
d.append("Name", t.Name), d.append("EndpointType", "1"), d.append("URL", "tcp://" + t.URL), d.append("PublicURL", t.URL), d.append("GroupID", "1"), d.append("TagIds", "[]"), d.append("TLS", "false"), d.append("TLSSkipVerify", "false"), d.append("TLSSkipClientVerify", "false"), d.append("TLSCACertFile", ""), d.append("TLSCertFile", ""), d.append("TLSKeyFile", ""), await Ae({
|
|
806
806
|
data: d,
|
|
807
807
|
headers: {
|
|
808
808
|
Authorization: `${L.jwt}`
|
|
@@ -810,7 +810,7 @@ const $ = {
|
|
|
810
810
|
}), m.value.close();
|
|
811
811
|
return;
|
|
812
812
|
}
|
|
813
|
-
const
|
|
813
|
+
const s = (L, d) => {
|
|
814
814
|
const T = Math.max(L.length, d.length);
|
|
815
815
|
return Array.from({
|
|
816
816
|
length: T
|
|
@@ -824,41 +824,41 @@ const $ = {
|
|
|
824
824
|
};
|
|
825
825
|
});
|
|
826
826
|
}, B = {
|
|
827
|
-
packages_id: [
|
|
827
|
+
packages_id: [t.packages_id],
|
|
828
828
|
server_id: [r.value.id],
|
|
829
829
|
service_type: window.$prodType,
|
|
830
830
|
deploy_params: {
|
|
831
|
-
probe_name:
|
|
832
|
-
collection_mode:
|
|
833
|
-
interface:
|
|
834
|
-
engine_ip:
|
|
835
|
-
engine_port:
|
|
836
|
-
filterWhitelist:
|
|
837
|
-
filterBlacklist:
|
|
831
|
+
probe_name: t.probe_name || "",
|
|
832
|
+
collection_mode: t.collection_mode,
|
|
833
|
+
interface: t.interface || "",
|
|
834
|
+
engine_ip: t.engine_ip || "",
|
|
835
|
+
engine_port: t.engine_port || "",
|
|
836
|
+
filterWhitelist: s(M.value, O.value),
|
|
837
|
+
filterBlacklist: s(S.value, I.value)
|
|
838
838
|
}
|
|
839
839
|
};
|
|
840
840
|
await ae({
|
|
841
841
|
data: B
|
|
842
842
|
}), a.value.getTableList(), m.value.close();
|
|
843
843
|
}
|
|
844
|
-
function J(
|
|
845
|
-
Se({
|
|
846
|
-
data: [
|
|
844
|
+
async function J(t) {
|
|
845
|
+
await Se({
|
|
846
|
+
data: [t.id]
|
|
847
847
|
}), a.value.getTableList();
|
|
848
848
|
}
|
|
849
|
-
function
|
|
850
|
-
Ce({
|
|
851
|
-
data: [
|
|
849
|
+
async function u(t) {
|
|
850
|
+
await Ce({
|
|
851
|
+
data: [t.id]
|
|
852
852
|
}), a.value.getTableList();
|
|
853
853
|
}
|
|
854
|
-
function f(
|
|
855
|
-
qe({
|
|
856
|
-
data: [
|
|
854
|
+
async function f(t) {
|
|
855
|
+
await qe({
|
|
856
|
+
data: [t.id]
|
|
857
857
|
}), a.value.getTableList();
|
|
858
858
|
}
|
|
859
|
-
function N(
|
|
860
|
-
v.value = "docker",
|
|
861
|
-
URL: `${
|
|
859
|
+
function N(t) {
|
|
860
|
+
v.value = "docker", y.value = "添加容器监控", r.value = {
|
|
861
|
+
URL: `${t.ip_address}:2375`
|
|
862
862
|
}, m.value.open();
|
|
863
863
|
}
|
|
864
864
|
const A = H([{
|
|
@@ -928,7 +928,7 @@ const $ = {
|
|
|
928
928
|
}, {
|
|
929
929
|
field: "deployed_count",
|
|
930
930
|
name: "已部署探针数量",
|
|
931
|
-
render: (
|
|
931
|
+
render: (t) => e("span", null, [t.row.deployment_packages.length])
|
|
932
932
|
}, {
|
|
933
933
|
field: "status",
|
|
934
934
|
name: "状态",
|
|
@@ -1069,16 +1069,16 @@ const $ = {
|
|
|
1069
1069
|
deploy: {
|
|
1070
1070
|
type: "input",
|
|
1071
1071
|
tooltip: "白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",
|
|
1072
|
-
render: () =>
|
|
1072
|
+
render: () => e(z, null, [e("p", {
|
|
1073
1073
|
class: "color-[var(--el-text-color-regular)]"
|
|
1074
|
-
}, [E("源ip端口:")]),
|
|
1074
|
+
}, [E("源ip端口:")]), e(P, {
|
|
1075
1075
|
modelValue: M.value,
|
|
1076
|
-
"onUpdate:modelValue": (
|
|
1077
|
-
}, null),
|
|
1076
|
+
"onUpdate:modelValue": (t) => M.value = t
|
|
1077
|
+
}, null), e("p", {
|
|
1078
1078
|
class: "color-[var(--el-text-color-regular)]"
|
|
1079
|
-
}, [E("目的ip端口:")]),
|
|
1079
|
+
}, [E("目的ip端口:")]), e(P, {
|
|
1080
1080
|
modelValue: O.value,
|
|
1081
|
-
"onUpdate:modelValue": (
|
|
1081
|
+
"onUpdate:modelValue": (t) => O.value = t
|
|
1082
1082
|
}, null)])
|
|
1083
1083
|
},
|
|
1084
1084
|
hide: !0
|
|
@@ -1088,16 +1088,16 @@ const $ = {
|
|
|
1088
1088
|
deploy: {
|
|
1089
1089
|
type: "input",
|
|
1090
1090
|
tooltip: "黑名单配置后,将不再采集黑名单内相关流量",
|
|
1091
|
-
render: () =>
|
|
1091
|
+
render: () => e(z, null, [e("p", {
|
|
1092
1092
|
class: "color-[var(--el-text-color-regular)]"
|
|
1093
|
-
}, [E("源ip端口:")]),
|
|
1093
|
+
}, [E("源ip端口:")]), e(P, {
|
|
1094
1094
|
modelValue: S.value,
|
|
1095
|
-
"onUpdate:modelValue": (
|
|
1096
|
-
}, null),
|
|
1095
|
+
"onUpdate:modelValue": (t) => S.value = t
|
|
1096
|
+
}, null), e("p", {
|
|
1097
1097
|
class: "color-[var(--el-text-color-regular)]"
|
|
1098
|
-
}, [E("目的ip端口:")]),
|
|
1098
|
+
}, [E("目的ip端口:")]), e(P, {
|
|
1099
1099
|
modelValue: I.value,
|
|
1100
|
-
"onUpdate:modelValue": (
|
|
1100
|
+
"onUpdate:modelValue": (t) => I.value = t
|
|
1101
1101
|
}, null)])
|
|
1102
1102
|
},
|
|
1103
1103
|
hide: !0
|
|
@@ -1116,18 +1116,17 @@ const $ = {
|
|
|
1116
1116
|
name: "端点 URL ",
|
|
1117
1117
|
hide: !0,
|
|
1118
1118
|
docker: {
|
|
1119
|
-
type: "input"
|
|
1120
|
-
disabled: !0
|
|
1119
|
+
type: "input"
|
|
1121
1120
|
}
|
|
1122
1121
|
}, {
|
|
1123
1122
|
field: "status_monitorning",
|
|
1124
1123
|
name: "状态监控",
|
|
1125
|
-
render: (
|
|
1124
|
+
render: (t) => e(z, null, [e(c("el-button"), {
|
|
1126
1125
|
class: "custom-btn",
|
|
1127
1126
|
type: "primary",
|
|
1128
1127
|
icon: "Plus",
|
|
1129
1128
|
link: !0,
|
|
1130
|
-
onClick: () => N(
|
|
1129
|
+
onClick: () => N(t.row)
|
|
1131
1130
|
}, {
|
|
1132
1131
|
default: () => [E("添加")]
|
|
1133
1132
|
})])
|
|
@@ -1136,68 +1135,68 @@ const $ = {
|
|
|
1136
1135
|
name: window.$t("global.operate"),
|
|
1137
1136
|
width: 180,
|
|
1138
1137
|
fixed: "right",
|
|
1139
|
-
render: (
|
|
1138
|
+
render: (t) => e("div", null, [e(c("el-button"), {
|
|
1140
1139
|
link: !0,
|
|
1141
1140
|
type: "primary",
|
|
1142
1141
|
icon: "Edit",
|
|
1143
1142
|
title: "修改",
|
|
1144
1143
|
class: "custom-btn",
|
|
1145
|
-
onClick: () => g(
|
|
1146
|
-
}, null),
|
|
1144
|
+
onClick: () => g(t.row)
|
|
1145
|
+
}, null), e(c("el-button"), {
|
|
1147
1146
|
link: !0,
|
|
1148
1147
|
type: "primary",
|
|
1149
1148
|
icon: "Connection",
|
|
1150
1149
|
title: "连通性检查",
|
|
1151
1150
|
class: "custom-btn",
|
|
1152
|
-
onClick: () => J(
|
|
1153
|
-
}, null),
|
|
1151
|
+
onClick: () => J(t.row)
|
|
1152
|
+
}, null), e(c("el-button"), {
|
|
1154
1153
|
link: !0,
|
|
1155
1154
|
type: "primary",
|
|
1156
1155
|
class: "custom-btn",
|
|
1157
|
-
onClick: () =>
|
|
1156
|
+
onClick: () => u(t.row)
|
|
1158
1157
|
}, {
|
|
1159
|
-
icon: () =>
|
|
1158
|
+
icon: () => e(c("tds-svg-icon"), {
|
|
1160
1159
|
name: "install_env",
|
|
1161
1160
|
tip: "测试安装环境"
|
|
1162
1161
|
}, null)
|
|
1163
|
-
}),
|
|
1162
|
+
}), e(c("el-button"), {
|
|
1164
1163
|
link: !0,
|
|
1165
1164
|
type: "primary",
|
|
1166
1165
|
class: "custom-btn",
|
|
1167
|
-
onClick: () => f(
|
|
1166
|
+
onClick: () => f(t.row)
|
|
1168
1167
|
}, {
|
|
1169
|
-
icon: () =>
|
|
1168
|
+
icon: () => e(c("tds-svg-icon"), {
|
|
1170
1169
|
name: "docker",
|
|
1171
1170
|
tip: "自动安装docker环境"
|
|
1172
1171
|
}, null)
|
|
1173
|
-
}),
|
|
1172
|
+
}), e(c("el-button"), {
|
|
1174
1173
|
link: !0,
|
|
1175
1174
|
type: "primary",
|
|
1176
1175
|
class: "custom-btn",
|
|
1177
|
-
onClick: () =>
|
|
1176
|
+
onClick: () => _(t.row)
|
|
1178
1177
|
}, {
|
|
1179
|
-
icon: () =>
|
|
1178
|
+
icon: () => e(c("tds-svg-icon"), {
|
|
1180
1179
|
name: "deployed",
|
|
1181
1180
|
tip: "部署"
|
|
1182
1181
|
}, null)
|
|
1183
|
-
}),
|
|
1182
|
+
}), e(c("el-button"), {
|
|
1184
1183
|
link: !0,
|
|
1185
1184
|
type: "danger",
|
|
1186
1185
|
icon: "Delete",
|
|
1187
1186
|
title: o("button.delete"),
|
|
1188
|
-
onClick: () =>
|
|
1187
|
+
onClick: () => i([t.row])
|
|
1189
1188
|
}, null)])
|
|
1190
1189
|
}]);
|
|
1191
|
-
return (
|
|
1190
|
+
return (t, s) => {
|
|
1192
1191
|
const B = c("el-button"), L = c("Delete"), d = c("el-icon"), T = c("el-table-column"), j = c("TdsTable");
|
|
1193
|
-
return h(), x("div", Ze, [
|
|
1192
|
+
return h(), x("div", Ze, [e(j, {
|
|
1194
1193
|
ref_key: "refTdsTable",
|
|
1195
1194
|
ref: a,
|
|
1196
1195
|
columns: A,
|
|
1197
1196
|
"request-api": F(ie),
|
|
1198
1197
|
"search-col": 4,
|
|
1199
1198
|
"init-param": k,
|
|
1200
|
-
options:
|
|
1199
|
+
options: t.$tableOptions({
|
|
1201
1200
|
refresh: {
|
|
1202
1201
|
ssh_status: [1],
|
|
1203
1202
|
check_env_ok: [1]
|
|
@@ -1205,20 +1204,20 @@ const $ = {
|
|
|
1205
1204
|
}),
|
|
1206
1205
|
"reserve-selection": ""
|
|
1207
1206
|
}, {
|
|
1208
|
-
tableHeader: b(() => [p("div", Qe, [
|
|
1207
|
+
tableHeader: b(() => [p("div", Qe, [e(B, {
|
|
1209
1208
|
class: "custom-btn",
|
|
1210
1209
|
type: "primary",
|
|
1211
1210
|
icon: "Plus",
|
|
1212
1211
|
plain: "",
|
|
1213
|
-
onClick:
|
|
1212
|
+
onClick: s[0] || (s[0] = (D) => g())
|
|
1214
1213
|
}, {
|
|
1215
1214
|
default: b(() => [E(q(F(o)("button.add")), 1)]),
|
|
1216
1215
|
_: 1
|
|
1217
1216
|
})])]),
|
|
1218
|
-
default: b(() => [
|
|
1217
|
+
default: b(() => [e(T, {
|
|
1219
1218
|
type: "expand"
|
|
1220
1219
|
}, {
|
|
1221
|
-
default: b((D) => [D.row.deployment_packages && D.row.deployment_packages.length > 0 ? (h(), x("div", Xe, [
|
|
1220
|
+
default: b((D) => [D.row.deployment_packages && D.row.deployment_packages.length > 0 ? (h(), x("div", Xe, [s[4] || (s[4] = p("div", {
|
|
1222
1221
|
class: "font-bold text-14px mt-12px"
|
|
1223
1222
|
}, "已部署的探针包", -1)), p("div", Ye, [(h(!0), x(z, null, G(D.row.deployment_packages, (C) => (h(), x("div", {
|
|
1224
1223
|
key: C.id,
|
|
@@ -1229,34 +1228,34 @@ const $ = {
|
|
|
1229
1228
|
"text-amber-600 bg-amber-50 border-amber-200": C.deploy_type === 1,
|
|
1230
1229
|
"text-red-600 bg-red-50 border-red-200": C.deploy_type === 2
|
|
1231
1230
|
}])
|
|
1232
|
-
}, q(C.deploy_type === 0 ? "
|
|
1231
|
+
}, q(C.deploy_type === 0 ? "第一次安装" : C.deploy_type === 1 ? "升级" : "卸载"), 3), p("div", et, q(C.file_name), 1), p("div", tt, [p("p", lt, [s[1] || (s[1] = p("span", {
|
|
1233
1232
|
class: "opacity-70 mr-2"
|
|
1234
|
-
}, "版本:", -1)), E(" " + q(C.version), 1)]), p("p", ot, [
|
|
1233
|
+
}, "版本:", -1)), E(" " + q(C.version), 1)]), p("p", ot, [s[2] || (s[2] = p("span", {
|
|
1235
1234
|
class: "opacity-70 mr-2"
|
|
1236
|
-
}, "部署时间:", -1)), E(" " + q(C.deployment_time), 1)])]), p("div", rt, [
|
|
1235
|
+
}, "部署时间:", -1)), E(" " + q(C.deployment_time), 1)])]), p("div", rt, [e(B, {
|
|
1237
1236
|
type: "danger",
|
|
1238
1237
|
circle: "",
|
|
1239
1238
|
class: "mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",
|
|
1240
1239
|
onClick: le((Z) => U(C), ["stop"])
|
|
1241
1240
|
}, {
|
|
1242
|
-
default: b(() => [
|
|
1241
|
+
default: b(() => [e(d, {
|
|
1243
1242
|
size: "20"
|
|
1244
1243
|
}, {
|
|
1245
|
-
default: b(() => [
|
|
1244
|
+
default: b(() => [e(L)]),
|
|
1246
1245
|
_: 1
|
|
1247
1246
|
})]),
|
|
1248
1247
|
_: 1
|
|
1249
|
-
}, 8, ["onClick"]),
|
|
1248
|
+
}, 8, ["onClick"]), s[3] || (s[3] = p("span", {
|
|
1250
1249
|
class: "text-white text-12px font-medium tracking-wide"
|
|
1251
1250
|
}, "卸载", -1))])]))), 128))])])) : (h(), x("div", nt, "暂无部署服务器记录"))]),
|
|
1252
1251
|
_: 1
|
|
1253
1252
|
})]),
|
|
1254
1253
|
_: 1
|
|
1255
|
-
}, 8, ["columns", "request-api", "init-param", "options"]),
|
|
1254
|
+
}, 8, ["columns", "request-api", "init-param", "options"]), e(F(re), oe({
|
|
1256
1255
|
ref_key: "refTdsForm",
|
|
1257
1256
|
ref: m
|
|
1258
|
-
},
|
|
1259
|
-
title:
|
|
1257
|
+
}, t.$formBindProps({
|
|
1258
|
+
title: y.value,
|
|
1260
1259
|
form: r.value,
|
|
1261
1260
|
columns: A,
|
|
1262
1261
|
formKey: v.value
|
|
@@ -1277,19 +1276,19 @@ const $ = {
|
|
|
1277
1276
|
}), n = w(), a = H([{
|
|
1278
1277
|
field: "packages_name",
|
|
1279
1278
|
name: "探针包",
|
|
1280
|
-
render: (
|
|
1279
|
+
render: (y) => e(z, null, [e("p", {
|
|
1281
1280
|
class: "font-bold"
|
|
1282
|
-
}, [
|
|
1281
|
+
}, [y.row.packages_name]), e("p", {
|
|
1283
1282
|
class: "text-gray-400"
|
|
1284
|
-
}, [
|
|
1283
|
+
}, [y.row.packages_version])])
|
|
1285
1284
|
}, {
|
|
1286
1285
|
field: "server_name",
|
|
1287
1286
|
name: "服务器",
|
|
1288
|
-
render: (
|
|
1287
|
+
render: (y) => e(z, null, [e("p", {
|
|
1289
1288
|
class: "font-bold"
|
|
1290
|
-
}, [
|
|
1289
|
+
}, [y.row.server_name]), e("p", {
|
|
1291
1290
|
class: "text-gray-400"
|
|
1292
|
-
}, [
|
|
1291
|
+
}, [y.row.ip_address])])
|
|
1293
1292
|
}, {
|
|
1294
1293
|
field: "deployment_time",
|
|
1295
1294
|
name: "部署时间"
|
|
@@ -1323,19 +1322,19 @@ const $ = {
|
|
|
1323
1322
|
}, 5e3);
|
|
1324
1323
|
return pe(() => {
|
|
1325
1324
|
clearInterval(m);
|
|
1326
|
-
}), (
|
|
1325
|
+
}), (y, r) => {
|
|
1327
1326
|
const v = c("el-table-column"), k = c("TdsTable");
|
|
1328
|
-
return h(), x("div", st, [
|
|
1327
|
+
return h(), x("div", st, [e(k, {
|
|
1329
1328
|
ref_key: "refTdsTable",
|
|
1330
1329
|
ref: n,
|
|
1331
1330
|
columns: a,
|
|
1332
1331
|
"search-col": 4,
|
|
1333
1332
|
"request-api": F(Ue),
|
|
1334
|
-
options:
|
|
1333
|
+
options: y.$tableOptions(),
|
|
1335
1334
|
"init-param": o,
|
|
1336
1335
|
"reserve-selection": ""
|
|
1337
1336
|
}, {
|
|
1338
|
-
default: b(() => [
|
|
1337
|
+
default: b(() => [e(v, {
|
|
1339
1338
|
type: "expand"
|
|
1340
1339
|
}, {
|
|
1341
1340
|
default: b((g) => [p("div", it, q(g.row.deployment_log), 1)]),
|
|
@@ -1357,15 +1356,15 @@ const $ = {
|
|
|
1357
1356
|
setup(l) {
|
|
1358
1357
|
const o = w("package");
|
|
1359
1358
|
return (n, a) => {
|
|
1360
|
-
const m = c("el-tab-pane"),
|
|
1359
|
+
const m = c("el-tab-pane"), y = c("el-tabs");
|
|
1361
1360
|
return h(), x("div", dt, [
|
|
1362
|
-
|
|
1361
|
+
e(y, {
|
|
1363
1362
|
modelValue: o.value,
|
|
1364
1363
|
"onUpdate:modelValue": a[0] || (a[0] = (r) => o.value = r),
|
|
1365
1364
|
class: "demo-tabs"
|
|
1366
1365
|
}, {
|
|
1367
1366
|
default: b(() => [
|
|
1368
|
-
|
|
1367
|
+
e(m, {
|
|
1369
1368
|
label: "安装包管理",
|
|
1370
1369
|
name: "package"
|
|
1371
1370
|
}, {
|
|
@@ -1377,7 +1376,7 @@ const $ = {
|
|
|
1377
1376
|
]),
|
|
1378
1377
|
_: 1
|
|
1379
1378
|
}),
|
|
1380
|
-
|
|
1379
|
+
e(m, {
|
|
1381
1380
|
label: "探针部署",
|
|
1382
1381
|
name: "deploy"
|
|
1383
1382
|
}, {
|
|
@@ -1386,7 +1385,7 @@ const $ = {
|
|
|
1386
1385
|
]),
|
|
1387
1386
|
_: 1
|
|
1388
1387
|
}),
|
|
1389
|
-
|
|
1388
|
+
e(m, {
|
|
1390
1389
|
label: "部署历史",
|
|
1391
1390
|
name: "history"
|
|
1392
1391
|
}, {
|
package/lib/t-probe-ui.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(V,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@element-plus/icons-vue"),require("topdatasec-ui"),require("spark-md5"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","topdatasec-ui","spark-md5","element-plus"],e):(V=typeof globalThis<"u"?globalThis:V||self,e(V.TProbeUI={},V.Vue,V.IconsVue,V.TopdatasecUI,V.SparkMD5,V.ElementPlus))})(this,function(V,e,P,M,J,z){"use strict";const Ge="",Z={key:0,class:"absolute right--13px text-#f56c6c hover:cursor-pointer"},Q=e.defineComponent({__name:"IpPortList",props:{modelValue:{default:()=>[{ip:"",port:""}]},modelModifiers:{}},emits:["update:modelValue"],setup(o){const r=e.useModel(o,"modelValue"),{$t:n}=window;function a(){r.value=[...r.value,{ip:"",port:""}]}function c(u){const l=[...r.value];l.splice(u,1),r.value=l}return(u,l)=>{const f=e.resolveComponent("el-input"),h=e.resolveComponent("el-form-item"),y=e.resolveComponent("el-icon"),i=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(m,x)=>(e.openBlock(),e.createElementBlock("div",{key:x,class:"flex form-m0 w-100% mb-5px"},[e.createVNode(h,{class:"w-70%"},{default:e.withCtx(()=>[e.createVNode(f,{modelValue:m.ip,"onUpdate:modelValue":T=>m.ip=T,class:"min-w-300px w-100%",placeholder:"IP"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e.createVNode(h,{class:"ml-auto w-30%"},{default:e.withCtx(()=>[e.createVNode(f,{modelValue:m.port,"onUpdate:modelValue":T=>m.port=T,class:"ml-10",placeholder:e.unref(n)("global.port")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:2},1024),r.value.length>1?(e.openBlock(),e.createElementBlock("div",Z,[e.createVNode(y,{onClick:T=>c(x)},{default:e.withCtx(()=>[e.createVNode(e.unref(P.CircleClose))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)]))),128)),e.createVNode(i,{class:"w-100% mt-10px border-dashed!",icon:"Plus",onClick:a})])}}}),Je="",I=(o,r)=>{const n=o.__vccOpts||o;for(const[a,c]of r)n[a]=c;return n},L=I(Q,[["__scopeId","data-v-16fc9c64"]]),D=5*1024*1024;function X(o,r){return new Promise((n,a)=>{const c=new J.ArrayBuffer,u=new FileReader,l=Math.ceil(o.size/D);let f=0;u.onload=y=>{var i;if(c.append((i=y.target)==null?void 0:i.result),f++,r){const m=Math.floor(f/l*100);r(m)}if(f<l)h();else{const m=c.end();n(m)}},u.onerror=()=>{a(new Error("MD5计算失败"))};function h(){const y=f*D,i=Math.min(y+D,o.size);u.readAsArrayBuffer(o.slice(y,i))}h()})}async function Y(o,r,n,a,c,u="/api/upload/chunk"){const l=r*D,f=Math.min(l+D,o.size),h=o.slice(l,f),y=f-l,i=new FormData;i.append("file",h,o.name),i.append("chunkIndex",String(r+1)),i.append("totalChunkNum",String(n)),i.append("fileMd5",a),i.append("tds_token",c),i.append("fileName",o.name),i.append("fileSize",String(o.size)),i.append("fileExt",o.name.substring(o.name.lastIndexOf(".")+1)),i.append("chunkSize",String(D)),i.append("currentChunkSize",String(y));try{const m=await fetch(u,{method:"POST",body:i});if(console.log(m,"upload response"),!m.ok)throw new Error(`分片 ${r+1} 上传失败,HTTP状态码: ${m.status}`);const x=await m.json();if(console.log(x,"upload result"),x.recode!==0)throw new Error(`上传失败: ${x.remsg||"未知错误"}`);return!0}catch(m){throw console.error(`上传分片 ${r+1} 时出错:`,m),m}}async function ee(o,r="/api/upload/merge"){try{if(!(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).ok)throw new Error("文件合并失败");return!0}catch(n){return console.error("合并分片时出错:",n),!1}}async function te(o){const{token:r,file:n,fileDesc:a="",uploadUrl:c="/api/upload/chunk",mergeUrl:u="/api/upload/merge",onProgress:l,onSuccess:f,onError:h}=o;try{l==null||l({progress:0,statusText:"正在计算文件MD5...",status:"preparing"});const i=await X(n,k=>{l==null||l({progress:Math.floor(k*.1),statusText:`正在计算文件MD5... ${k}%`,status:"preparing"})});l==null||l({progress:10,statusText:"MD5计算完成",status:"preparing",fileMd5:i});const m=Math.ceil(n.size/D);l==null||l({progress:10,statusText:`开始上传 (共${m}个分片)`,status:"uploading",fileMd5:i});for(let k=0;k<m;k++){const U=Math.floor(k/m*80);l==null||l({progress:10+U,statusText:`正在上传分片 ${k+1}/${m}`,status:"uploading",fileMd5:i}),await Y(n,k,m,i,r,c)}l==null||l({progress:90,statusText:"正在合并文件...",status:"merging",fileMd5:i});const x=n.name.substring(n.name.lastIndexOf(".")+1),T={fileDesc:a,fileExt:x,fileMd5:i,fileName:n.name,fileSize:String(n.size),tds_token:r,totalChunkNum:String(m)};if(!await ee(T,u))throw new Error("文件合并失败");l==null||l({progress:100,statusText:"上传成功",status:"success",fileMd5:i}),z.ElMessage.success(`${n.name} 上传成功`),f==null||f(i)}catch(y){l==null||l({progress:0,statusText:y.message||"上传失败",status:"error"}),z.ElMessage.error(`${n.name} 上传失败: ${y.message}`),h==null||h(y)}}function oe(o){if(o===0)return"0 B";const r=1024,n=["B","KB","MB","GB","TB"],a=Math.floor(Math.log(o)/Math.log(r));return Math.round(o/Math.pow(r,a)*100)/100+" "+n[a]}const g={get deployURL(){return window.$probeURL||""},get dockerURL(){return window.$dockerURL||""}},O=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deploy`,method:"post",data:o}),re=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/add`,method:"post",data:o}),le=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/update`,method:"post",data:o}),j=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/packages/get`,method:"post",data:o,isError:!1}),v=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/get`,method:"post",data:o,isError:!1}),ne=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/del`,method:"post",data:o}),ae=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/packages/del`,method:"post",data:o}),se=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/get_arch`,method:"post",data:o,isError:!1}),de=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deployment_history/get`,method:"post",data:o,isError:!1}),ie=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/test_ssh`,method:"post",data:o}),pe=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/check_env`,method:"post",data:o}),ce=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/install_env`,method:"post",data:o}),K=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deploy/del`,method:"post",data:o}),ue=(o={})=>window.$http.request({url:`${g.dockerURL}/api/auth`,method:"post",data:o,isError:!1}),me=(o={})=>window.$http.request({url:`${g.dockerURL}/api/endpoints`,method:"post",data:o.data,headers:o.headers}),_e={class:"h-100%"},fe={key:0,class:"upload-progress-list"},ye={class:"file-info"},ge={class:"file-name"},he={class:"file-size"},be={class:"progress-text"},we={class:"table-box h-[calc(100%-220px)]",style:{height:"calc(100% - 220px)"}},xe={key:0},ke={class:"flex flex-wrap gap-12px p-12px"},Ne={class:"font-bold text-14px mb-8px text-[var(--el-text-color-primary)] pr-12"},Ve={class:"text-12px text-[var(--el-text-color-regular)] space-y-4px"},Te={class:"flex items-center"},Ce={class:"flex items-center"},Ee={class:"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex flex-col items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 z-10"},$e={key:1,class:"font-bold text-center text-gray-500 py-20"},Be=e.defineComponent({__name:"index",props:{token:{type:String,default:""}},setup(o){const r=e.ref(),n=e.ref(),a=e.ref("快速部署"),c=e.ref({}),{$t:u,$messageBox:l}=window,f=o;function h(s){c.value={id:s.id},n.value.open()}const y=e.ref([{ip:"",port:""}]),i=e.ref([{ip:"",port:""}]),m=e.ref([{ip:"",port:""}]),x=e.ref([{ip:"",port:""}]);async function T(s){const _=(C,t)=>{const d=Math.max(C.length,t.length);return Array.from({length:d},(S,w)=>{var p,b,F,E;return{src_ip:((p=C[w])==null?void 0:p.ip)||"",src_port:Number((b=C[w])==null?void 0:b.port)||0,dst_ip:((F=t[w])==null?void 0:F.ip)||"",dst_port:Number((E=t[w])==null?void 0:E.port)||0}})},B={packages_id:[c.value.id],server_id:s.server_id,service_type:window.$prodType,deploy_params:{probe_name:s.probe_name||"",collection_mode:s.collection_mode,interface:s.interface||"",engine_ip:s.engine_ip||"",engine_port:s.engine_port||"",filterWhitelist:_(y.value,i.value),filterBlacklist:_(m.value,x.value)}};await O({data:B}),r.value.getTableList(),n.value.close()}async function q(s){l(s,"file_name",u("button.delete"),"error").then(async()=>{const _=s.map(B=>B.id);await ae({data:_}),r.value.getTableList()})}async function k(s){l([s],"server_name",u("button.delete"),"error").then(async()=>{await K({deploy_id:[s.id],service_type:window.$prodType}),r.value.getTableList()})}const U=e.reactive([{field:"server_id",name:"选择服务器",enum:()=>v({service_type:window.$prodType}),fieldNames:{value:"id",label:"server_name"},show:{type:"select",prop:{multiple:!0},dataType:"any"},hide:!0,rules:[{required:!0}]},{field:"file_name",name:"文件名称"},{field:"version",name:"版本"},{field:"file_size",name:"大小"},{field:"upload_time",name:"上传时间"},{field:"deployment_server",name:"已部署服务器数",render:s=>{var _;return((_=s.row.deployment_server)==null?void 0:_.length)||0}},{field:"upload_status",name:"状态",tag:!0,enum:[{label:"上传失败",value:0,tagType:"danger"},{label:"上传中",value:1,tagType:"warning"},{label:"上传成功",value:2,tagType:"success"}]},{field:"probe_name",name:"探针名称",show:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"collection_mode",name:"采集模式",show:{type:"input",value:"DPDK",disabled:!0},hide:!0,rules:[{required:!0}]},{field:"interface",name:"采集网卡",show:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"engine_ip",name:"流量接收引擎IP",show:{type:"input"},hide:!0,rules:[{required:!0,type:"any"}]},{field:"engine_port",name:"流量接收引擎端口",show:{type:"input",dataType:"number",value:6379},hide:!0,rules:[{required:!0,type:"any"}]},{field:"whitelist",name:"探针过滤白名单",show:{type:"input",tooltip:"白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("div",{style:"width: 100%"},[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:y.value,"onUpdate:modelValue":s=>y.value=s},null)]),e.createVNode("div",{style:"width: 100%"},[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:i.value,"onUpdate:modelValue":s=>i.value=s},null)])])},hide:!0},{field:"blacklist",name:"探针过滤黑名单",show:{type:"input",tooltip:"黑名单配置后,将不再采集黑名单内相关流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:m.value,"onUpdate:modelValue":s=>m.value=s},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:x.value,"onUpdate:modelValue":s=>x.value=s},null)])},hide:!0},{field:"operation",name:window.$t("global.operate"),width:140,fixed:"right",render:s=>e.createVNode("div",null,[e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>h(s.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"deployed",tip:"部署"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"danger",icon:"Delete",title:u("button.delete"),onClick:()=>q([s.row])},null)])}]),$=e.ref([]);function A(s){const _=s.raw;if(!_)return;const B={fileName:_.name,fileSize:_.size,progress:0,progressStatus:"",statusText:"准备上传..."};$.value.push(B);const C=$.value.length-1;te({file:_,fileDesc:"探针安装包",uploadUrl:g.deployURL+"/service_deploy/deployment/packages/upload",mergeUrl:g.deployURL+"/service_deploy/deployment/packages/upload_merge",token:f.token,onProgress:t=>{const d=$.value[C];d&&(d.progress=t.progress,d.statusText=t.statusText,t.fileMd5&&(d.fileMd5=t.fileMd5),t.status==="error"?d.progressStatus="exception":t.status==="success"?d.progressStatus="success":d.progressStatus="")},onSuccess:()=>{var d;const t=$.value[C];t&&(t.progress=100,t.progressStatus="success",t.statusText="上传成功"),(d=r.value)==null||d.getTableList(),setTimeout(()=>{const S=$.value.findIndex(w=>w.fileName===_.name);S!==-1&&$.value.splice(S,1)},3e3)},onError:t=>{console.error("文件上传失败:",t);const d=$.value[C];d&&(d.progressStatus="exception",d.statusText=t.message||"上传失败")}})}return(s,_)=>{const B=e.resolveComponent("el-icon"),C=e.resolveComponent("el-upload"),t=e.resolveComponent("el-progress"),d=e.resolveComponent("Delete"),S=e.resolveComponent("el-button"),w=e.resolveComponent("el-table-column");return e.openBlock(),e.createElementBlock("div",_e,[e.createVNode(C,{class:"upload-demo mt-10px",drag:"",action:"","auto-upload":!1,accept:".tar.gz,.zip","on-change":A,"show-file-list":!1,multiple:""},{default:e.withCtx(()=>[e.createVNode(B,{class:"el-icon--upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(P.UploadFilled))]),_:1}),_[0]||(_[0]=e.createElementVNode("div",{class:"el-upload__text"},[e.createTextVNode(" 点击或拖拽文件到此处上传 "),e.createElementVNode("br"),e.createElementVNode("em",null,"支持的格式: tar.gz, zip")],-1))]),_:1}),$.value.length>0?(e.openBlock(),e.createElementBlock("div",fe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.fileName,class:"upload-progress-item"},[e.createElementVNode("div",ye,[e.createElementVNode("span",ge,e.toDisplayString(p.fileName),1),e.createElementVNode("span",he,e.toDisplayString(e.unref(oe)(p.fileSize)),1)]),e.createVNode(t,{percentage:p.progress,status:p.progressStatus},null,8,["percentage","status"]),e.createElementVNode("div",be,e.toDisplayString(p.statusText),1)]))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",we,[e.createVNode(e.unref(M.TdsTable),{ref_key:"refTdsTable",ref:r,columns:U,"request-api":e.unref(j),options:s.$tableOptions()},{default:e.withCtx(()=>[e.createVNode(w,{type:"expand"},{default:e.withCtx(p=>[p.row.deployment_server&&p.row.deployment_server.length>0?(e.openBlock(),e.createElementBlock("div",xe,[_[4]||(_[4]=e.createElementVNode("div",{class:"font-bold text-14px mt-12px"},"已部署的服务器",-1)),e.createElementVNode("div",ke,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.row.deployment_server,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"group w-25% px-20px py-10px rounded-8px bg-[var(--el-fill-color-light)] border border-solid border-[var(--el-border-color-lighter)] hover:shadow-lg transition-all duration-300 relative overflow-hidden"},[e.createElementVNode("div",{class:e.normalizeClass(["absolute top-0 right-0 px-2 py-1 text-12px font-medium border-b border-l rounded-bl-8px",{"text-green-600 bg-green-50 border-green-200":b.deploy_type===0,"text-amber-600 bg-amber-50 border-amber-200":b.deploy_type===1,"text-red-600 bg-red-50 border-red-200":b.deploy_type===2}])},e.toDisplayString(b.deploy_type===0?"安装":b.deploy_type===1?"升级":"卸载"),3),e.createElementVNode("div",Ne,e.toDisplayString(b.server_name),1),e.createElementVNode("div",Ve,[e.createElementVNode("p",Te,[_[1]||(_[1]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"IP:",-1)),e.createTextVNode(" "+e.toDisplayString(b.ip_address),1)]),e.createElementVNode("p",Ce,[_[2]||(_[2]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"时间:",-1)),e.createTextVNode(" "+e.toDisplayString(b.deployment_time),1)])]),e.createElementVNode("div",Ee,[e.createVNode(S,{type:"danger",circle:"",class:"mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",onClick:e.withModifiers(F=>k(b),["stop"])},{default:e.withCtx(()=>[e.createVNode(B,{size:"20"},{default:e.withCtx(()=>[e.createVNode(d)]),_:1})]),_:1},8,["onClick"]),_[3]||(_[3]=e.createElementVNode("span",{class:"text-white text-12px font-medium tracking-wide"},"卸载",-1))])]))),128))])])):(e.openBlock(),e.createElementBlock("div",$e,"暂无部署服务器记录"))]),_:1})]),_:1},8,["columns","request-api","options"])]),e.createVNode(e.unref(M.TdsForm),e.mergeProps({ref_key:"refTdsForm",ref:n},s.$formBindProps({title:a.value,form:c.value,columns:U}),{onSubmit:T}),null,16)])}}}),Se={class:"table-box"},Le={class:"flex items-center"},Ue={key:0},De={class:"flex flex-wrap gap-12px p-12px"},qe={class:"font-bold text-14px mb-8px text-[var(--el-text-color-primary)] pr-12"},Fe={class:"text-12px text-[var(--el-text-color-regular)] space-y-4px"},Me={class:"flex items-center"},Ae={class:"flex items-center"},Re={class:"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex flex-col items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 z-10"},Pe={key:1,class:"font-bold text-center text-gray-500 py-20"},ze=e.defineComponent({__name:"index",setup(o){const{$t:r,$messageBox:n}=window,a=e.ref(),c=e.ref(),u=e.ref(""),l=e.ref({}),f=e.ref("show"),h=e.reactive({service_type:window.$prodType});function y(t){l.value=t?Object.assign({},t):{},f.value="show",u.value=t?"修改服务器":"添加服务器",c.value.open()}const i=t=>{n(t,"server_name",r("button.delete"),"error").then(async()=>{await ne({data:t.map(d=>d.id),service_type:window.$prodType}),a.value.getTableList()})};function m(t){l.value={id:t.id},f.value="deploy",u.value="快速部署",c.value.open()}async function x(t){n([t],"server_name",r("button.delete"),"error").then(async()=>{await K({deploy_id:[t.id],service_type:window.$prodType}),a.value.getTableList()})}const T=e.ref([{ip:"",port:""}]),q=e.ref([{ip:"",port:""}]),k=e.ref([{ip:"",port:""}]),U=e.ref([{ip:"",port:""}]);async function $(t){if(f.value==="show"){l.value.id?(await le({data:{...t,id:l.value.id}}),a.value.getTableList(),c.value.close()):(await re({data:t}),a.value.getTableList(),c.value.close());return}if(f.value==="docker"){const w=await ue({password:"Tds@12345",username:"admin"}),p=new FormData;p.append("Name",t.Name),p.append("EndpointType","1"),p.append("URL","tcp://"+t.URL),p.append("PublicURL",t.URL),p.append("GroupID","1"),p.append("TagIds","[]"),p.append("TLS","false"),p.append("TLSSkipVerify","false"),p.append("TLSSkipClientVerify","false"),p.append("TLSCACertFile",""),p.append("TLSCertFile",""),p.append("TLSKeyFile",""),await me({data:p,headers:{Authorization:`${w.jwt}`}}),c.value.close();return}const d=(w,p)=>{const b=Math.max(w.length,p.length);return Array.from({length:b},(F,E)=>{var N,R,W,G;return{src_ip:((N=w[E])==null?void 0:N.ip)||"",src_port:Number((R=w[E])==null?void 0:R.port)||0,dst_ip:((W=p[E])==null?void 0:W.ip)||"",dst_port:Number((G=p[E])==null?void 0:G.port)||0}})},S={packages_id:[t.packages_id],server_id:[l.value.id],service_type:window.$prodType,deploy_params:{probe_name:t.probe_name||"",collection_mode:t.collection_mode,interface:t.interface||"",engine_ip:t.engine_ip||"",engine_port:t.engine_port||"",filterWhitelist:d(T.value,q.value),filterBlacklist:d(k.value,U.value)}};await O({data:S}),a.value.getTableList(),c.value.close()}function A(t){ie({data:[t.id]}),a.value.getTableList()}function s(t){pe({data:[t.id]}),a.value.getTableList()}function _(t){ce({data:[t.id]}),a.value.getTableList()}function B(t){f.value="docker",u.value="添加容器监控",l.value={URL:`${t.ip_address}:${t.ssh_port}`},c.value.open()}const C=e.reactive([{field:"server_name",name:"服务器名称",show:{type:"input"},rules:[{required:!0}]},{field:"ip_address",name:"IP地址",show:{type:"input"},rules:[{required:!0}]},{field:"ssh_port",name:"端口",show:{type:"input",dataType:"number"},rules:[{required:!0,type:"any"}]},{field:"ssh_username",name:"SSH用户",hide:!0,show:{type:"input"},rules:[{required:!0}]},{field:"ssh_password",name:"SSH登录密码",hide:!0,show:{type:"input",prop:{type:"password",showPassword:!0}},rules:[{required:!0}]},{field:"arch",name:"架构",enum:se,hide:!0,show:{type:"select"},rules:[{required:!0}]},{field:"deployed_count",name:"已部署探针数量",render:t=>e.createVNode("span",null,[t.row.deployment_packages.length])},{field:"status",name:"状态",tag:!0,enum:[{label:"在线",value:1,tagType:"success"},{label:"不在线",value:0,tagType:"danger"}]},{field:"ssh_status",name:"连通性检查",tag:!0,enum:[{label:"失败",value:3,tagType:"danger"},{label:"成功",value:2,tagType:"success"},{label:"检测中",value:1,tagType:"warning"},{label:"未检测",value:0,tagType:"default"}]},{field:"check_ssh_msg",name:"连通性检查失败原因",width:150},{field:"check_env_ok",name:"安装环境",tag:!0,enum:[{label:"失败",value:3,tagType:"danger"},{label:"成功",value:2,tagType:"success"},{label:"检测中",value:1,tagType:"warning"},{label:"未检测",value:0,tagType:"default"}]},{field:"check_env_msg",name:"环境检查失败原因",width:150},{field:"packages_id",name:"安装包",enum:j,fieldNames:{value:"id",label:"file_name"},deploy:{type:"select"},hide:!0,rules:[{required:!0}]},{field:"probe_name",name:"探针名称",deploy:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"collection_mode",name:"采集模式",deploy:{type:"input",value:"DPDK",disabled:!0},hide:!0,rules:[{required:!0}]},{field:"interface",name:"采集网卡",deploy:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"engine_ip",name:"流量接收引擎IP",deploy:{type:"input"},rules:[{required:!0,type:"any"}],hide:!0},{field:"engine_port",name:"流量接收引擎端口",deploy:{type:"input",dataType:"number",value:6379},hide:!0,rules:[{required:!0,type:"any"}]},{field:"whitelist",name:"探针过滤白名单",deploy:{type:"input",tooltip:"白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:T.value,"onUpdate:modelValue":t=>T.value=t},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:q.value,"onUpdate:modelValue":t=>q.value=t},null)])},hide:!0},{field:"blacklist",name:"探针过滤黑名单",deploy:{type:"input",tooltip:"黑名单配置后,将不再采集黑名单内相关流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:k.value,"onUpdate:modelValue":t=>k.value=t},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:U.value,"onUpdate:modelValue":t=>U.value=t},null)])},hide:!0},{field:"Name",name:"名称",hide:!0,docker:{type:"input"},rules:[{required:!0}]},{field:"URL",name:"端点 URL ",hide:!0,docker:{type:"input",disabled:!0}},{field:"status_monitorning",name:"状态监控",render:t=>e.createVNode(e.Fragment,null,[e.createVNode(e.resolveComponent("el-button"),{class:"custom-btn",type:"primary",icon:"Plus",link:!0,onClick:()=>B(t.row)},{default:()=>[e.createTextVNode("添加")]})])},{field:"operation",name:window.$t("global.operate"),width:180,fixed:"right",render:t=>e.createVNode("div",null,[e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",icon:"Edit",title:"修改",class:"custom-btn",onClick:()=>y(t.row)},null),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",icon:"Connection",title:"连通性检查",class:"custom-btn",onClick:()=>A(t.row)},null),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>s(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"install_env",tip:"测试安装环境"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>_(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"docker",tip:"自动安装docker环境"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>m(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"deployed",tip:"部署"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"danger",icon:"Delete",title:r("button.delete"),onClick:()=>i([t.row])},null)])}]);return(t,d)=>{const S=e.resolveComponent("el-button"),w=e.resolveComponent("Delete"),p=e.resolveComponent("el-icon"),b=e.resolveComponent("el-table-column"),F=e.resolveComponent("TdsTable");return e.openBlock(),e.createElementBlock("div",Se,[e.createVNode(F,{ref_key:"refTdsTable",ref:a,columns:C,"request-api":e.unref(v),"search-col":4,"init-param":h,options:t.$tableOptions({refresh:{ssh_status:[1],check_env_ok:[1]}}),"reserve-selection":""},{tableHeader:e.withCtx(()=>[e.createElementVNode("div",Le,[e.createVNode(S,{class:"custom-btn",type:"primary",icon:"Plus",plain:"",onClick:d[0]||(d[0]=E=>y())},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(r)("button.add")),1)]),_:1})])]),default:e.withCtx(()=>[e.createVNode(b,{type:"expand"},{default:e.withCtx(E=>[E.row.deployment_packages&&E.row.deployment_packages.length>0?(e.openBlock(),e.createElementBlock("div",Ue,[d[4]||(d[4]=e.createElementVNode("div",{class:"font-bold text-14px mt-12px"},"已部署的探针包",-1)),e.createElementVNode("div",De,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.row.deployment_packages,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"group w-25% px-20px py-10px rounded-8px bg-[var(--el-fill-color-light)] border border-solid border-[var(--el-border-color-lighter)] hover:shadow-lg transition-all duration-300 relative overflow-hidden"},[e.createElementVNode("div",{class:e.normalizeClass(["absolute top-0 right-0 px-2 py-1 text-12px font-medium border-b border-l rounded-bl-8px",{"text-green-600 bg-green-50 border-green-200":N.deploy_type===0,"text-amber-600 bg-amber-50 border-amber-200":N.deploy_type===1,"text-red-600 bg-red-50 border-red-200":N.deploy_type===2}])},e.toDisplayString(N.deploy_type===0?"安装":N.deploy_type===1?"升级":"卸载"),3),e.createElementVNode("div",qe,e.toDisplayString(N.file_name),1),e.createElementVNode("div",Fe,[e.createElementVNode("p",Me,[d[1]||(d[1]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"版本:",-1)),e.createTextVNode(" "+e.toDisplayString(N.version),1)]),e.createElementVNode("p",Ae,[d[2]||(d[2]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"部署时间:",-1)),e.createTextVNode(" "+e.toDisplayString(N.deployment_time),1)])]),e.createElementVNode("div",Re,[e.createVNode(S,{type:"danger",circle:"",class:"mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",onClick:e.withModifiers(R=>x(N),["stop"])},{default:e.withCtx(()=>[e.createVNode(p,{size:"20"},{default:e.withCtx(()=>[e.createVNode(w)]),_:1})]),_:1},8,["onClick"]),d[3]||(d[3]=e.createElementVNode("span",{class:"text-white text-12px font-medium tracking-wide"},"卸载",-1))])]))),128))])])):(e.openBlock(),e.createElementBlock("div",Pe,"暂无部署服务器记录"))]),_:1})]),_:1},8,["columns","request-api","init-param","options"]),e.createVNode(e.unref(M.TdsForm),e.mergeProps({ref_key:"refTdsForm",ref:c},t.$formBindProps({title:u.value,form:l.value,columns:C,formKey:f.value}),{onSubmit:$}),null,16)])}}}),Ie={class:"table-box"},Oe={class:"whitespace-pre-wrap font-mono py-20px px-10px bg-gray-100 rounded text-sm text-gray-800"},je=e.defineComponent({__name:"index",setup(o){const r=e.reactive({service_type:window.$prodType}),n=e.ref(),a=e.reactive([{field:"packages_name",name:"探针包",render:u=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"font-bold"},[u.row.packages_name]),e.createVNode("p",{class:"text-gray-400"},[u.row.packages_version])])},{field:"server_name",name:"服务器",render:u=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"font-bold"},[u.row.server_name]),e.createVNode("p",{class:"text-gray-400"},[u.row.ip_address])])},{field:"deployment_time",name:"部署时间"},{field:"deployment_status",name:"状态",tag:!0,enum:[{label:"未知",value:-1,tagType:"default"},{label:"待执行",value:0,tagType:"default"},{label:"部署中",value:1,tagType:"warning"},{label:"部署成功",value:2,tagType:"success"},{label:"部署失败",value:3,tagType:"danger"}]}]),c=setInterval(()=>{n.value&&n.value.getTableList()},5e3);return e.onUnmounted(()=>{clearInterval(c)}),(u,l)=>{const f=e.resolveComponent("el-table-column"),h=e.resolveComponent("TdsTable");return e.openBlock(),e.createElementBlock("div",Ie,[e.createVNode(h,{ref_key:"refTdsTable",ref:n,columns:a,"search-col":4,"request-api":e.unref(de),options:u.$tableOptions(),"init-param":r,"reserve-selection":""},{default:e.withCtx(()=>[e.createVNode(f,{type:"expand"},{default:e.withCtx(y=>[e.createElementVNode("div",Oe,e.toDisplayString(y.row.deployment_log),1)]),_:1})]),_:1},8,["columns","request-api","options","init-param"])])}}}),ve={class:"main-wrapper"},Ke=e.defineComponent({name:"TCProbe",__name:"index",props:{token:{type:String,default:""}},setup(o){const r=e.ref("package");return(n,a)=>{const c=e.resolveComponent("el-tab-pane"),u=e.resolveComponent("el-tabs");return e.openBlock(),e.createElementBlock("div",ve,[e.createVNode(u,{modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=l=>r.value=l),class:"demo-tabs"},{default:e.withCtx(()=>[e.createVNode(c,{label:"安装包管理",name:"package"},{default:e.withCtx(()=>[r.value==="package"?(e.openBlock(),e.createBlock(Be,{key:0,token:o.token},null,8,["token"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(c,{label:"探针部署",name:"deploy"},{default:e.withCtx(()=>[r.value==="deploy"?(e.openBlock(),e.createBlock(ze,{key:0})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(c,{label:"部署历史",name:"history"},{default:e.withCtx(()=>[r.value==="history"?(e.openBlock(),e.createBlock(je,{key:0})):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ze="",H=((o,r)=>{if(o.install=n=>{for(const a of[o,...Object.values(r??{})])n.component(a.name,a)},r)for(const[n,a]of Object.entries(r))o[n]=a;return o})(I(Ke,[["__scopeId","data-v-f99b9b23"]])),He={TCProbe:H},We={install(o,r){Object.entries(He).forEach(([n,a])=>{o.component(n,a)}),r!=null&&r.prodType&&(window.$prodType=r.prodType),r!=null&&r.envURL&&(window.$probeURL=r.envURL),r!=null&&r.dockerURL&&(window.$dockerURL=r.dockerURL)}};V.TCProbe=H,V.default=We,Object.defineProperties(V,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
1
|
+
(function(V,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@element-plus/icons-vue"),require("topdatasec-ui"),require("spark-md5"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","topdatasec-ui","spark-md5","element-plus"],e):(V=typeof globalThis<"u"?globalThis:V||self,e(V.TProbeUI={},V.Vue,V.IconsVue,V.TopdatasecUI,V.SparkMD5,V.ElementPlus))})(this,function(V,e,P,M,J,z){"use strict";const Ge="",Z={key:0,class:"absolute right--13px text-#f56c6c hover:cursor-pointer"},Q=e.defineComponent({__name:"IpPortList",props:{modelValue:{default:()=>[{ip:"",port:""}]},modelModifiers:{}},emits:["update:modelValue"],setup(o){const r=e.useModel(o,"modelValue"),{$t:n}=window;function a(){r.value=[...r.value,{ip:"",port:""}]}function c(m){const l=[...r.value];l.splice(m,1),r.value=l}return(m,l)=>{const y=e.resolveComponent("el-input"),h=e.resolveComponent("el-form-item"),f=e.resolveComponent("el-icon"),d=e.resolveComponent("el-button");return e.openBlock(),e.createElementBlock("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(u,x)=>(e.openBlock(),e.createElementBlock("div",{key:x,class:"flex form-m0 w-100% mb-5px"},[e.createVNode(h,{class:"w-70%"},{default:e.withCtx(()=>[e.createVNode(y,{modelValue:u.ip,"onUpdate:modelValue":T=>u.ip=T,class:"min-w-300px w-100%",placeholder:"IP"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e.createVNode(h,{class:"ml-auto w-30%"},{default:e.withCtx(()=>[e.createVNode(y,{modelValue:u.port,"onUpdate:modelValue":T=>u.port=T,class:"ml-10",placeholder:e.unref(n)("global.port")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:2},1024),r.value.length>1?(e.openBlock(),e.createElementBlock("div",Z,[e.createVNode(f,{onClick:T=>c(x)},{default:e.withCtx(()=>[e.createVNode(e.unref(P.CircleClose))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)]))),128)),e.createVNode(d,{class:"w-100% mt-10px border-dashed!",icon:"Plus",onClick:a})])}}}),Je="",I=(o,r)=>{const n=o.__vccOpts||o;for(const[a,c]of r)n[a]=c;return n},L=I(Q,[["__scopeId","data-v-16fc9c64"]]),D=4*1024*1024;function X(o,r){return new Promise((n,a)=>{const c=new J.ArrayBuffer,m=new FileReader,l=Math.ceil(o.size/D);let y=0;m.onload=f=>{var d;if(c.append((d=f.target)==null?void 0:d.result),y++,r){const u=Math.floor(y/l*100);r(u)}if(y<l)h();else{const u=c.end();n(u)}},m.onerror=()=>{a(new Error("MD5计算失败"))};function h(){const f=y*D,d=Math.min(f+D,o.size);m.readAsArrayBuffer(o.slice(f,d))}h()})}async function Y(o,r,n,a,c,m="/api/upload/chunk"){const l=r*D,y=Math.min(l+D,o.size),h=o.slice(l,y),f=y-l,d=new FormData;d.append("file",h,o.name),d.append("chunkIndex",String(r+1)),d.append("totalChunkNum",String(n)),d.append("fileMd5",a),d.append("tds_token",c),d.append("fileName",o.name),d.append("fileSize",String(o.size)),d.append("fileExt",o.name.substring(o.name.lastIndexOf(".")+1)),d.append("chunkSize",String(D)),d.append("currentChunkSize",String(f));try{const u=await fetch(m,{method:"POST",body:d});if(console.log(u,"upload response"),!u.ok)throw new Error(`分片 ${r+1} 上传失败,HTTP状态码: ${u.status}`);const x=await u.json();if(console.log(x,"upload result"),x.recode!==0)throw new Error(`上传失败: ${x.remsg||"未知错误"}`);return!0}catch(u){throw console.error(`上传分片 ${r+1} 时出错:`,u),u}}async function ee(o,r="/api/upload/merge"){try{if(!(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).ok)throw new Error("文件合并失败");return!0}catch(n){return console.error("合并分片时出错:",n),!1}}async function te(o){const{token:r,file:n,fileDesc:a="",uploadUrl:c="/api/upload/chunk",mergeUrl:m="/api/upload/merge",onProgress:l,onSuccess:y,onError:h}=o;try{l==null||l({progress:0,statusText:"正在计算文件MD5...",status:"preparing"});const d=await X(n,k=>{l==null||l({progress:Math.floor(k*.1),statusText:`正在计算文件MD5... ${k}%`,status:"preparing"})});l==null||l({progress:10,statusText:"MD5计算完成",status:"preparing",fileMd5:d});const u=Math.ceil(n.size/D);l==null||l({progress:10,statusText:`开始上传 (共${u}个分片)`,status:"uploading",fileMd5:d});for(let k=0;k<u;k++){const U=Math.floor(k/u*80);l==null||l({progress:10+U,statusText:`正在上传分片 ${k+1}/${u}`,status:"uploading",fileMd5:d}),await Y(n,k,u,d,r,c)}l==null||l({progress:90,statusText:"正在合并文件...",status:"merging",fileMd5:d});const x=n.name.substring(n.name.lastIndexOf(".")+1),T={fileDesc:a,fileExt:x,fileMd5:d,fileName:n.name,fileSize:String(n.size),tds_token:r,totalChunkNum:String(u)};if(!await ee(T,m))throw new Error("文件合并失败");l==null||l({progress:100,statusText:"上传成功",status:"success",fileMd5:d}),z.ElMessage.success(`${n.name} 上传成功`),y==null||y(d)}catch(f){l==null||l({progress:0,statusText:f.message||"上传失败",status:"error"}),z.ElMessage.error(`${n.name} 上传失败: ${f.message}`),h==null||h(f)}}function oe(o){if(o===0)return"0 B";const r=1024,n=["B","KB","MB","GB","TB"],a=Math.floor(Math.log(o)/Math.log(r));return Math.round(o/Math.pow(r,a)*100)/100+" "+n[a]}const g={get deployURL(){return window.$probeURL||""},get dockerURL(){return window.$dockerURL||""}},O=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deploy`,method:"post",data:o}),re=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/add`,method:"post",data:o}),le=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/update`,method:"post",data:o}),j=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/packages/get`,method:"post",data:o,isError:!1}),v=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/get`,method:"post",data:o,isError:!1}),ne=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/del`,method:"post",data:o}),ae=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/packages/del`,method:"post",data:o}),se=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/get_arch`,method:"post",data:o,isError:!1}),de=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deployment_history/get`,method:"post",data:o,isError:!1}),ie=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/test_ssh`,method:"post",data:o}),pe=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/check_env`,method:"post",data:o}),ce=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/servers/install_env`,method:"post",data:o}),K=(o={})=>window.$http.request({url:`${g.deployURL}/service_deploy/deployment/deploy/del`,method:"post",data:o}),ue=(o={})=>window.$http.request({url:`${g.dockerURL}/api/auth`,method:"post",data:o,isError:!1}),me=(o={})=>window.$http.request({url:`${g.dockerURL}/api/endpoints`,method:"post",data:o.data,headers:o.headers}),_e={class:"h-100%"},ye={key:0,class:"upload-progress-list"},fe={class:"file-info"},ge={class:"file-name"},he={class:"file-size"},be={class:"progress-text"},we={class:"table-box h-[calc(100%-220px)]",style:{height:"calc(100% - 220px)"}},xe={key:0},ke={class:"flex flex-wrap gap-12px p-12px"},Ne={class:"font-bold text-14px mb-8px text-[var(--el-text-color-primary)] pr-12"},Ve={class:"text-12px text-[var(--el-text-color-regular)] space-y-4px"},Te={class:"flex items-center"},Ce={class:"flex items-center"},Ee={class:"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex flex-col items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 z-10"},$e={key:1,class:"font-bold text-center text-gray-500 py-20"},Be=e.defineComponent({__name:"index",props:{token:{type:String,default:""}},setup(o){const r=e.ref(),n=e.ref(),a=e.ref("快速部署"),c=e.ref({}),{$t:m,$messageBox:l}=window,y=o;function h(i){c.value={id:i.id},n.value.open()}const f=e.ref([{ip:"",port:""}]),d=e.ref([{ip:"",port:""}]),u=e.ref([{ip:"",port:""}]),x=e.ref([{ip:"",port:""}]);async function T(i){const _=(C,t)=>{const s=Math.max(C.length,t.length);return Array.from({length:s},(S,w)=>{var p,b,F,E;return{src_ip:((p=C[w])==null?void 0:p.ip)||"",src_port:Number((b=C[w])==null?void 0:b.port)||0,dst_ip:((F=t[w])==null?void 0:F.ip)||"",dst_port:Number((E=t[w])==null?void 0:E.port)||0}})},B={packages_id:[c.value.id],server_id:i.server_id,service_type:window.$prodType,deploy_params:{probe_name:i.probe_name||"",collection_mode:i.collection_mode,interface:i.interface||"",engine_ip:i.engine_ip||"",engine_port:i.engine_port||"",filterWhitelist:_(f.value,d.value),filterBlacklist:_(u.value,x.value)}};await O({data:B}),r.value.getTableList(),n.value.close()}async function q(i){l(i,"file_name",m("button.delete"),"error").then(async()=>{const _=i.map(B=>B.id);await ae({data:_}),r.value.getTableList()})}async function k(i){l("是否卸载该探针","","卸载","error").then(async()=>{await K({deploy_id:[i.id],service_type:window.$prodType}),r.value.getTableList()})}const U=e.reactive([{field:"server_id",name:"选择服务器",enum:()=>v({service_type:window.$prodType}),fieldNames:{value:"id",label:"server_name"},show:{type:"select",prop:{multiple:!0},dataType:"any"},hide:!0,rules:[{required:!0}]},{field:"file_name",name:"文件名称"},{field:"version",name:"版本"},{field:"file_size",name:"大小"},{field:"upload_time",name:"上传时间"},{field:"deployment_server",name:"已部署服务器数",render:i=>{var _;return((_=i.row.deployment_server)==null?void 0:_.length)||0}},{field:"upload_status",name:"状态",tag:!0,enum:[{label:"上传失败",value:0,tagType:"danger"},{label:"上传中",value:1,tagType:"warning"},{label:"上传成功",value:2,tagType:"success"}]},{field:"probe_name",name:"探针名称",show:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"collection_mode",name:"采集模式",show:{type:"input",value:"DPDK",disabled:!0},hide:!0,rules:[{required:!0}]},{field:"interface",name:"采集网卡",show:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"engine_ip",name:"流量接收引擎IP",show:{type:"input"},hide:!0,rules:[{required:!0,type:"any"}]},{field:"engine_port",name:"流量接收引擎端口",show:{type:"input",dataType:"number",value:6379},hide:!0,rules:[{required:!0,type:"any"}]},{field:"whitelist",name:"探针过滤白名单",show:{type:"input",tooltip:"白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("div",{style:"width: 100%"},[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:f.value,"onUpdate:modelValue":i=>f.value=i},null)]),e.createVNode("div",{style:"width: 100%"},[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:d.value,"onUpdate:modelValue":i=>d.value=i},null)])])},hide:!0},{field:"blacklist",name:"探针过滤黑名单",show:{type:"input",tooltip:"黑名单配置后,将不再采集黑名单内相关流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:u.value,"onUpdate:modelValue":i=>u.value=i},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:x.value,"onUpdate:modelValue":i=>x.value=i},null)])},hide:!0},{field:"operation",name:window.$t("global.operate"),width:140,fixed:"right",render:i=>e.createVNode("div",null,[e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>h(i.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"deployed",tip:"部署"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"danger",icon:"Delete",title:m("button.delete"),onClick:()=>q([i.row])},null)])}]),$=e.ref([]);function A(i){const _=i.raw;if(!_)return;const B={fileName:_.name,fileSize:_.size,progress:0,progressStatus:"",statusText:"准备上传..."};$.value.push(B);const C=$.value.length-1;te({file:_,fileDesc:"探针安装包",uploadUrl:g.deployURL+"/service_deploy/deployment/packages/upload",mergeUrl:g.deployURL+"/service_deploy/deployment/packages/upload_merge",token:y.token,onProgress:t=>{const s=$.value[C];s&&(s.progress=t.progress,s.statusText=t.statusText,t.fileMd5&&(s.fileMd5=t.fileMd5),t.status==="error"?s.progressStatus="exception":t.status==="success"?s.progressStatus="success":s.progressStatus="")},onSuccess:()=>{var s;const t=$.value[C];t&&(t.progress=100,t.progressStatus="success",t.statusText="上传成功"),(s=r.value)==null||s.getTableList(),setTimeout(()=>{const S=$.value.findIndex(w=>w.fileName===_.name);S!==-1&&$.value.splice(S,1)},3e3)},onError:t=>{console.error("文件上传失败:",t);const s=$.value[C];s&&(s.progressStatus="exception",s.statusText=t.message||"上传失败")}})}return(i,_)=>{const B=e.resolveComponent("el-icon"),C=e.resolveComponent("el-upload"),t=e.resolveComponent("el-progress"),s=e.resolveComponent("Delete"),S=e.resolveComponent("el-button"),w=e.resolveComponent("el-table-column");return e.openBlock(),e.createElementBlock("div",_e,[e.createVNode(C,{class:"upload-demo mt-10px",drag:"",action:"","auto-upload":!1,accept:".tar.gz,.zip","on-change":A,"show-file-list":!1,multiple:""},{default:e.withCtx(()=>[e.createVNode(B,{class:"el-icon--upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(P.UploadFilled))]),_:1}),_[0]||(_[0]=e.createElementVNode("div",{class:"el-upload__text"},[e.createTextVNode(" 点击或拖拽文件到此处上传 "),e.createElementVNode("br"),e.createElementVNode("em",null,"支持的格式: tar.gz, zip")],-1))]),_:1}),$.value.length>0?(e.openBlock(),e.createElementBlock("div",ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,p=>(e.openBlock(),e.createElementBlock("div",{key:p.fileName,class:"upload-progress-item"},[e.createElementVNode("div",fe,[e.createElementVNode("span",ge,e.toDisplayString(p.fileName),1),e.createElementVNode("span",he,e.toDisplayString(e.unref(oe)(p.fileSize)),1)]),e.createVNode(t,{percentage:p.progress,status:p.progressStatus},null,8,["percentage","status"]),e.createElementVNode("div",be,e.toDisplayString(p.statusText),1)]))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",we,[e.createVNode(e.unref(M.TdsTable),{ref_key:"refTdsTable",ref:r,columns:U,"request-api":e.unref(j),options:i.$tableOptions()},{default:e.withCtx(()=>[e.createVNode(w,{type:"expand"},{default:e.withCtx(p=>[p.row.deployment_server&&p.row.deployment_server.length>0?(e.openBlock(),e.createElementBlock("div",xe,[_[4]||(_[4]=e.createElementVNode("div",{class:"font-bold text-14px mt-12px"},"已部署的服务器",-1)),e.createElementVNode("div",ke,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.row.deployment_server,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"group w-25% px-20px py-10px rounded-8px bg-[var(--el-fill-color-light)] border border-solid border-[var(--el-border-color-lighter)] hover:shadow-lg transition-all duration-300 relative overflow-hidden"},[e.createElementVNode("div",{class:e.normalizeClass(["absolute top-0 right-0 px-2 py-1 text-12px font-medium border-b border-l rounded-bl-8px",{"text-green-600 bg-green-50 border-green-200":b.deploy_type===0,"text-amber-600 bg-amber-50 border-amber-200":b.deploy_type===1,"text-red-600 bg-red-50 border-red-200":b.deploy_type===2}])},e.toDisplayString(b.deploy_type===0?"第一次安装":b.deploy_type===1?"升级":"卸载"),3),e.createElementVNode("div",Ne,e.toDisplayString(b.server_name),1),e.createElementVNode("div",Ve,[e.createElementVNode("p",Te,[_[1]||(_[1]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"IP:",-1)),e.createTextVNode(" "+e.toDisplayString(b.ip_address),1)]),e.createElementVNode("p",Ce,[_[2]||(_[2]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"时间:",-1)),e.createTextVNode(" "+e.toDisplayString(b.deployment_time),1)])]),e.createElementVNode("div",Ee,[e.createVNode(S,{type:"danger",circle:"",class:"mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",onClick:e.withModifiers(F=>k(b),["stop"])},{default:e.withCtx(()=>[e.createVNode(B,{size:"20"},{default:e.withCtx(()=>[e.createVNode(s)]),_:1})]),_:1},8,["onClick"]),_[3]||(_[3]=e.createElementVNode("span",{class:"text-white text-12px font-medium tracking-wide"},"卸载",-1))])]))),128))])])):(e.openBlock(),e.createElementBlock("div",$e,"暂无部署服务器记录"))]),_:1})]),_:1},8,["columns","request-api","options"])]),e.createVNode(e.unref(M.TdsForm),e.mergeProps({ref_key:"refTdsForm",ref:n},i.$formBindProps({title:a.value,form:c.value,columns:U}),{onSubmit:T}),null,16)])}}}),Se={class:"table-box"},Le={class:"flex items-center"},Ue={key:0},De={class:"flex flex-wrap gap-12px p-12px"},qe={class:"font-bold text-14px mb-8px text-[var(--el-text-color-primary)] pr-12"},Fe={class:"text-12px text-[var(--el-text-color-regular)] space-y-4px"},Me={class:"flex items-center"},Ae={class:"flex items-center"},Re={class:"absolute inset-0 bg-black/60 backdrop-blur-[2px] flex flex-col items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300 z-10"},Pe={key:1,class:"font-bold text-center text-gray-500 py-20"},ze=e.defineComponent({__name:"index",setup(o){const{$t:r,$messageBox:n}=window,a=e.ref(),c=e.ref(),m=e.ref(""),l=e.ref({}),y=e.ref("show"),h=e.reactive({service_type:window.$prodType});function f(t){l.value=t?Object.assign({},t):{},y.value="show",m.value=t?"修改服务器":"添加服务器",c.value.open()}const d=t=>{n(t,"server_name",r("button.delete"),"error").then(async()=>{await ne({data:t.map(s=>s.id),service_type:window.$prodType}),a.value.getTableList()})};function u(t){l.value={id:t.id},y.value="deploy",m.value="快速部署",c.value.open()}async function x(t){n("是否卸载该探针","","卸载","error").then(async()=>{await K({deploy_id:[t.id],service_type:window.$prodType}),a.value.getTableList()})}const T=e.ref([{ip:"",port:""}]),q=e.ref([{ip:"",port:""}]),k=e.ref([{ip:"",port:""}]),U=e.ref([{ip:"",port:""}]);async function $(t){if(y.value==="show"){l.value.id?(await le({data:{...t,id:l.value.id}}),a.value.getTableList(),c.value.close()):(await re({data:t}),a.value.getTableList(),c.value.close());return}if(y.value==="docker"){const w=await ue({password:"Tds@12345",username:"admin"}),p=new FormData;p.append("Name",t.Name),p.append("EndpointType","1"),p.append("URL","tcp://"+t.URL),p.append("PublicURL",t.URL),p.append("GroupID","1"),p.append("TagIds","[]"),p.append("TLS","false"),p.append("TLSSkipVerify","false"),p.append("TLSSkipClientVerify","false"),p.append("TLSCACertFile",""),p.append("TLSCertFile",""),p.append("TLSKeyFile",""),await me({data:p,headers:{Authorization:`${w.jwt}`}}),c.value.close();return}const s=(w,p)=>{const b=Math.max(w.length,p.length);return Array.from({length:b},(F,E)=>{var N,R,W,G;return{src_ip:((N=w[E])==null?void 0:N.ip)||"",src_port:Number((R=w[E])==null?void 0:R.port)||0,dst_ip:((W=p[E])==null?void 0:W.ip)||"",dst_port:Number((G=p[E])==null?void 0:G.port)||0}})},S={packages_id:[t.packages_id],server_id:[l.value.id],service_type:window.$prodType,deploy_params:{probe_name:t.probe_name||"",collection_mode:t.collection_mode,interface:t.interface||"",engine_ip:t.engine_ip||"",engine_port:t.engine_port||"",filterWhitelist:s(T.value,q.value),filterBlacklist:s(k.value,U.value)}};await O({data:S}),a.value.getTableList(),c.value.close()}async function A(t){await ie({data:[t.id]}),a.value.getTableList()}async function i(t){await pe({data:[t.id]}),a.value.getTableList()}async function _(t){await ce({data:[t.id]}),a.value.getTableList()}function B(t){y.value="docker",m.value="添加容器监控",l.value={URL:`${t.ip_address}:2375`},c.value.open()}const C=e.reactive([{field:"server_name",name:"服务器名称",show:{type:"input"},rules:[{required:!0}]},{field:"ip_address",name:"IP地址",show:{type:"input"},rules:[{required:!0}]},{field:"ssh_port",name:"端口",show:{type:"input",dataType:"number"},rules:[{required:!0,type:"any"}]},{field:"ssh_username",name:"SSH用户",hide:!0,show:{type:"input"},rules:[{required:!0}]},{field:"ssh_password",name:"SSH登录密码",hide:!0,show:{type:"input",prop:{type:"password",showPassword:!0}},rules:[{required:!0}]},{field:"arch",name:"架构",enum:se,hide:!0,show:{type:"select"},rules:[{required:!0}]},{field:"deployed_count",name:"已部署探针数量",render:t=>e.createVNode("span",null,[t.row.deployment_packages.length])},{field:"status",name:"状态",tag:!0,enum:[{label:"在线",value:1,tagType:"success"},{label:"不在线",value:0,tagType:"danger"}]},{field:"ssh_status",name:"连通性检查",tag:!0,enum:[{label:"失败",value:3,tagType:"danger"},{label:"成功",value:2,tagType:"success"},{label:"检测中",value:1,tagType:"warning"},{label:"未检测",value:0,tagType:"default"}]},{field:"check_ssh_msg",name:"连通性检查失败原因",width:150},{field:"check_env_ok",name:"安装环境",tag:!0,enum:[{label:"失败",value:3,tagType:"danger"},{label:"成功",value:2,tagType:"success"},{label:"检测中",value:1,tagType:"warning"},{label:"未检测",value:0,tagType:"default"}]},{field:"check_env_msg",name:"环境检查失败原因",width:150},{field:"packages_id",name:"安装包",enum:j,fieldNames:{value:"id",label:"file_name"},deploy:{type:"select"},hide:!0,rules:[{required:!0}]},{field:"probe_name",name:"探针名称",deploy:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"collection_mode",name:"采集模式",deploy:{type:"input",value:"DPDK",disabled:!0},hide:!0,rules:[{required:!0}]},{field:"interface",name:"采集网卡",deploy:{type:"input"},hide:!0,rules:[{required:!0}]},{field:"engine_ip",name:"流量接收引擎IP",deploy:{type:"input"},rules:[{required:!0,type:"any"}],hide:!0},{field:"engine_port",name:"流量接收引擎端口",deploy:{type:"input",dataType:"number",value:6379},hide:!0,rules:[{required:!0,type:"any"}]},{field:"whitelist",name:"探针过滤白名单",deploy:{type:"input",tooltip:"白名单配置后,仅采集白名单内相关流量,如不填写,则采集所有流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:T.value,"onUpdate:modelValue":t=>T.value=t},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:q.value,"onUpdate:modelValue":t=>q.value=t},null)])},hide:!0},{field:"blacklist",name:"探针过滤黑名单",deploy:{type:"input",tooltip:"黑名单配置后,将不再采集黑名单内相关流量",render:()=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("源ip端口:")]),e.createVNode(L,{modelValue:k.value,"onUpdate:modelValue":t=>k.value=t},null),e.createVNode("p",{class:"color-[var(--el-text-color-regular)]"},[e.createTextVNode("目的ip端口:")]),e.createVNode(L,{modelValue:U.value,"onUpdate:modelValue":t=>U.value=t},null)])},hide:!0},{field:"Name",name:"名称",hide:!0,docker:{type:"input"},rules:[{required:!0}]},{field:"URL",name:"端点 URL ",hide:!0,docker:{type:"input"}},{field:"status_monitorning",name:"状态监控",render:t=>e.createVNode(e.Fragment,null,[e.createVNode(e.resolveComponent("el-button"),{class:"custom-btn",type:"primary",icon:"Plus",link:!0,onClick:()=>B(t.row)},{default:()=>[e.createTextVNode("添加")]})])},{field:"operation",name:window.$t("global.operate"),width:180,fixed:"right",render:t=>e.createVNode("div",null,[e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",icon:"Edit",title:"修改",class:"custom-btn",onClick:()=>f(t.row)},null),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",icon:"Connection",title:"连通性检查",class:"custom-btn",onClick:()=>A(t.row)},null),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>i(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"install_env",tip:"测试安装环境"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>_(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"docker",tip:"自动安装docker环境"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"primary",class:"custom-btn",onClick:()=>u(t.row)},{icon:()=>e.createVNode(e.resolveComponent("tds-svg-icon"),{name:"deployed",tip:"部署"},null)}),e.createVNode(e.resolveComponent("el-button"),{link:!0,type:"danger",icon:"Delete",title:r("button.delete"),onClick:()=>d([t.row])},null)])}]);return(t,s)=>{const S=e.resolveComponent("el-button"),w=e.resolveComponent("Delete"),p=e.resolveComponent("el-icon"),b=e.resolveComponent("el-table-column"),F=e.resolveComponent("TdsTable");return e.openBlock(),e.createElementBlock("div",Se,[e.createVNode(F,{ref_key:"refTdsTable",ref:a,columns:C,"request-api":e.unref(v),"search-col":4,"init-param":h,options:t.$tableOptions({refresh:{ssh_status:[1],check_env_ok:[1]}}),"reserve-selection":""},{tableHeader:e.withCtx(()=>[e.createElementVNode("div",Le,[e.createVNode(S,{class:"custom-btn",type:"primary",icon:"Plus",plain:"",onClick:s[0]||(s[0]=E=>f())},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(r)("button.add")),1)]),_:1})])]),default:e.withCtx(()=>[e.createVNode(b,{type:"expand"},{default:e.withCtx(E=>[E.row.deployment_packages&&E.row.deployment_packages.length>0?(e.openBlock(),e.createElementBlock("div",Ue,[s[4]||(s[4]=e.createElementVNode("div",{class:"font-bold text-14px mt-12px"},"已部署的探针包",-1)),e.createElementVNode("div",De,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.row.deployment_packages,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"group w-25% px-20px py-10px rounded-8px bg-[var(--el-fill-color-light)] border border-solid border-[var(--el-border-color-lighter)] hover:shadow-lg transition-all duration-300 relative overflow-hidden"},[e.createElementVNode("div",{class:e.normalizeClass(["absolute top-0 right-0 px-2 py-1 text-12px font-medium border-b border-l rounded-bl-8px",{"text-green-600 bg-green-50 border-green-200":N.deploy_type===0,"text-amber-600 bg-amber-50 border-amber-200":N.deploy_type===1,"text-red-600 bg-red-50 border-red-200":N.deploy_type===2}])},e.toDisplayString(N.deploy_type===0?"第一次安装":N.deploy_type===1?"升级":"卸载"),3),e.createElementVNode("div",qe,e.toDisplayString(N.file_name),1),e.createElementVNode("div",Fe,[e.createElementVNode("p",Me,[s[1]||(s[1]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"版本:",-1)),e.createTextVNode(" "+e.toDisplayString(N.version),1)]),e.createElementVNode("p",Ae,[s[2]||(s[2]=e.createElementVNode("span",{class:"opacity-70 mr-2"},"部署时间:",-1)),e.createTextVNode(" "+e.toDisplayString(N.deployment_time),1)])]),e.createElementVNode("div",Re,[e.createVNode(S,{type:"danger",circle:"",class:"mb-2 transform scale-90 group-hover:scale-100 transition-transform duration-300",onClick:e.withModifiers(R=>x(N),["stop"])},{default:e.withCtx(()=>[e.createVNode(p,{size:"20"},{default:e.withCtx(()=>[e.createVNode(w)]),_:1})]),_:1},8,["onClick"]),s[3]||(s[3]=e.createElementVNode("span",{class:"text-white text-12px font-medium tracking-wide"},"卸载",-1))])]))),128))])])):(e.openBlock(),e.createElementBlock("div",Pe,"暂无部署服务器记录"))]),_:1})]),_:1},8,["columns","request-api","init-param","options"]),e.createVNode(e.unref(M.TdsForm),e.mergeProps({ref_key:"refTdsForm",ref:c},t.$formBindProps({title:m.value,form:l.value,columns:C,formKey:y.value}),{onSubmit:$}),null,16)])}}}),Ie={class:"table-box"},Oe={class:"whitespace-pre-wrap font-mono py-20px px-10px bg-gray-100 rounded text-sm text-gray-800"},je=e.defineComponent({__name:"index",setup(o){const r=e.reactive({service_type:window.$prodType}),n=e.ref(),a=e.reactive([{field:"packages_name",name:"探针包",render:m=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"font-bold"},[m.row.packages_name]),e.createVNode("p",{class:"text-gray-400"},[m.row.packages_version])])},{field:"server_name",name:"服务器",render:m=>e.createVNode(e.Fragment,null,[e.createVNode("p",{class:"font-bold"},[m.row.server_name]),e.createVNode("p",{class:"text-gray-400"},[m.row.ip_address])])},{field:"deployment_time",name:"部署时间"},{field:"deployment_status",name:"状态",tag:!0,enum:[{label:"未知",value:-1,tagType:"default"},{label:"待执行",value:0,tagType:"default"},{label:"部署中",value:1,tagType:"warning"},{label:"部署成功",value:2,tagType:"success"},{label:"部署失败",value:3,tagType:"danger"}]}]),c=setInterval(()=>{n.value&&n.value.getTableList()},5e3);return e.onUnmounted(()=>{clearInterval(c)}),(m,l)=>{const y=e.resolveComponent("el-table-column"),h=e.resolveComponent("TdsTable");return e.openBlock(),e.createElementBlock("div",Ie,[e.createVNode(h,{ref_key:"refTdsTable",ref:n,columns:a,"search-col":4,"request-api":e.unref(de),options:m.$tableOptions(),"init-param":r,"reserve-selection":""},{default:e.withCtx(()=>[e.createVNode(y,{type:"expand"},{default:e.withCtx(f=>[e.createElementVNode("div",Oe,e.toDisplayString(f.row.deployment_log),1)]),_:1})]),_:1},8,["columns","request-api","options","init-param"])])}}}),ve={class:"main-wrapper"},Ke=e.defineComponent({name:"TCProbe",__name:"index",props:{token:{type:String,default:""}},setup(o){const r=e.ref("package");return(n,a)=>{const c=e.resolveComponent("el-tab-pane"),m=e.resolveComponent("el-tabs");return e.openBlock(),e.createElementBlock("div",ve,[e.createVNode(m,{modelValue:r.value,"onUpdate:modelValue":a[0]||(a[0]=l=>r.value=l),class:"demo-tabs"},{default:e.withCtx(()=>[e.createVNode(c,{label:"安装包管理",name:"package"},{default:e.withCtx(()=>[r.value==="package"?(e.openBlock(),e.createBlock(Be,{key:0,token:o.token},null,8,["token"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(c,{label:"探针部署",name:"deploy"},{default:e.withCtx(()=>[r.value==="deploy"?(e.openBlock(),e.createBlock(ze,{key:0})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(c,{label:"部署历史",name:"history"},{default:e.withCtx(()=>[r.value==="history"?(e.openBlock(),e.createBlock(je,{key:0})):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["modelValue"])])}}}),Ze="",H=((o,r)=>{if(o.install=n=>{for(const a of[o,...Object.values(r??{})])n.component(a.name,a)},r)for(const[n,a]of Object.entries(r))o[n]=a;return o})(I(Ke,[["__scopeId","data-v-f99b9b23"]])),He={TCProbe:H},We={install(o,r){Object.entries(He).forEach(([n,a])=>{o.component(n,a)}),r!=null&&r.prodType&&(window.$prodType=r.prodType),r!=null&&r.envURL&&(window.$probeURL=r.envURL),r!=null&&r.dockerURL&&(window.$dockerURL=r.dockerURL)}};V.TCProbe=H,V.default=We,Object.defineProperties(V,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|