@topdatasec/probe 1.0.9 → 1.0.11

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.
@@ -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 t, 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";
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(_, 1), o.value = r;
23
+ r.splice(y, 1), o.value = r;
24
24
  }
25
- return (_, r) => {
26
- const v = c("el-input"), k = c("el-form-item"), g = c("el-icon"), u = c("el-button");
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, (y, U) => (h(), x("div", {
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
- t(k, { class: "w-70%" }, {
32
+ e(k, { class: "w-70%" }, {
33
33
  default: b(() => [
34
- t(v, {
35
- modelValue: y.ip,
36
- "onUpdate:modelValue": (M) => y.ip = 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
- t(k, { class: "ml-auto w-30%" }, {
43
+ e(k, { class: "ml-auto w-30%" }, {
44
44
  default: b(() => [
45
- t(v, {
46
- modelValue: y.port,
47
- "onUpdate:modelValue": (M) => y.port = 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
- t(g, {
55
+ e(g, {
56
56
  onClick: (M) => m(U)
57
57
  }, {
58
58
  default: b(() => [
59
- t(F(ce))
59
+ e(F(ce))
60
60
  ]),
61
61
  _: 1
62
62
  }, 8, ["onClick"])
63
63
  ])) : K("", !0)
64
64
  ]))), 128)),
65
- t(u, {
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 = 5 * 1024 * 1024;
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(), _ = new FileReader(), r = Math.ceil(l.size / V);
82
+ const m = new ye.ArrayBuffer(), y = new FileReader(), r = Math.ceil(l.size / V);
83
83
  let v = 0;
84
- _.onload = (g) => {
85
- var u;
86
- if (m.append((u = g.target) == null ? void 0 : u.result), v++, o) {
87
- const y = Math.floor(v / r * 100);
88
- o(y);
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 y = m.end();
94
- n(y);
93
+ const _ = m.end();
94
+ n(_);
95
95
  }
96
- }, _.onerror = () => {
96
+ }, y.onerror = () => {
97
97
  a(new Error("MD5计算失败"));
98
98
  };
99
99
  function k() {
100
- const g = v * V, u = Math.min(g + V, l.size);
101
- _.readAsArrayBuffer(l.slice(g, u));
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, _ = "/api/upload/chunk") {
107
- const r = o * V, v = Math.min(r + V, l.size), k = l.slice(r, v), g = v - r, u = new FormData();
108
- u.append("file", k, l.name), u.append("chunkIndex", String(o + 1)), u.append("totalChunkNum", String(n)), u.append("fileMd5", a), u.append("tds_token", m), u.append("fileName", l.name), u.append("fileSize", String(l.size)), u.append("fileExt", l.name.substring(l.name.lastIndexOf(".") + 1)), u.append("chunkSize", String(V)), u.append("currentChunkSize", String(g));
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 y = await fetch(_, {
110
+ const _ = await fetch(y, {
111
111
  method: "POST",
112
- body: u
112
+ body: i
113
113
  });
114
- if (console.log(y, "upload response"), !y.ok)
115
- throw new Error(`分片 ${o + 1} 上传失败,HTTP状态码: ${y.status}`);
116
- const U = await y.json();
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 (y) {
121
- throw console.error(`上传分片 ${o + 1} 时出错:`, y), y;
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: _ = "/api/upload/merge", onProgress: r, onSuccess: v, onError: k } = l;
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 u = await ge(n, (S) => {
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: u
159
+ fileMd5: i
160
160
  });
161
- const y = Math.ceil(n.size / V);
161
+ const _ = Math.ceil(n.size / V);
162
162
  r == null || r({
163
163
  progress: 10,
164
- statusText: `开始上传 (共${y}个分片)`,
164
+ statusText: `开始上传 (共${_}个分片)`,
165
165
  status: "uploading",
166
- fileMd5: u
166
+ fileMd5: i
167
167
  });
168
- for (let S = 0; S < y; S++) {
169
- const I = Math.floor(S / y * 80);
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}/${y}`,
172
+ statusText: `正在上传分片 ${S + 1}/${_}`,
173
173
  status: "uploading",
174
- fileMd5: u
175
- }), await he(n, S, y, u, o, m);
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: u
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: u,
186
+ fileMd5: i,
187
187
  fileName: n.name,
188
188
  fileSize: String(n.size),
189
189
  tds_token: o,
190
- totalChunkNum: String(y)
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: u
199
- }), ee.success(`${n.name} 上传成功`), v == null || v(u);
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(s) {
335
+ function k(u) {
336
336
  m.value = {
337
- id: s.id
337
+ id: u.id
338
338
  }, n.value.open();
339
339
  }
340
340
  const g = w([{
341
341
  ip: "",
342
342
  port: ""
343
- }]), u = w([{
343
+ }]), i = w([{
344
344
  ip: "",
345
345
  port: ""
346
- }]), y = w([{
346
+ }]), _ = w([{
347
347
  ip: "",
348
348
  port: ""
349
349
  }]), U = w([{
350
350
  ip: "",
351
351
  port: ""
352
352
  }]);
353
- async function M(s) {
354
- const f = (A, e) => {
355
- const i = Math.max(A.length, e.length);
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: i
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 = e[L]) == null ? void 0 : j.ip) || "",
364
- dst_port: Number((D = e[L]) == null ? void 0 : D.port) || 0
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: s.server_id,
369
+ server_id: u.server_id,
370
370
  service_type: window.$prodType,
371
371
  deploy_params: {
372
- probe_name: s.probe_name || "",
373
- collection_mode: s.collection_mode,
374
- interface: s.interface || "",
375
- engine_ip: s.engine_ip || "",
376
- engine_port: s.engine_port || "",
377
- filterWhitelist: f(g.value, u.value),
378
- filterBlacklist: f(y.value, U.value)
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(s) {
386
- r(s, "file_name", _("button.delete"), "error").then(async () => {
387
- const f = s.map((N) => N.id);
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(s) {
394
- r([s], "server_name", _("button.delete"), "error").then(async () => {
393
+ async function S(u) {
394
+ r("是否卸载该探针", "", "卸载", "error").then(async () => {
395
395
  await ue({
396
- deploy_id: [s.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: (s) => {
444
+ render: (u) => {
445
445
  var f;
446
- return ((f = s.row.deployment_server) == null ? void 0 : f.length) || 0;
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: () => t(z, null, [t("div", {
534
+ render: () => e(z, null, [e("div", {
535
535
  style: "width: 100%"
536
- }, [t("p", {
536
+ }, [e("p", {
537
537
  class: "color-[var(--el-text-color-regular)]"
538
- }, [E("源ip端口:")]), t(P, {
538
+ }, [E("源ip端口:")]), e(P, {
539
539
  modelValue: g.value,
540
- "onUpdate:modelValue": (s) => g.value = s
541
- }, null)]), t("div", {
540
+ "onUpdate:modelValue": (u) => g.value = u
541
+ }, null)]), e("div", {
542
542
  style: "width: 100%"
543
- }, [t("p", {
543
+ }, [e("p", {
544
544
  class: "color-[var(--el-text-color-regular)]"
545
- }, [E("目的ip端口:")]), t(P, {
546
- modelValue: u.value,
547
- "onUpdate:modelValue": (s) => u.value = s
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: () => t(z, null, [t("p", {
558
+ render: () => e(z, null, [e("p", {
559
559
  class: "color-[var(--el-text-color-regular)]"
560
- }, [E("源ip端口:")]), t(P, {
561
- modelValue: y.value,
562
- "onUpdate:modelValue": (s) => y.value = s
563
- }, null), t("p", {
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端口:")]), t(P, {
565
+ }, [E("目的ip端口:")]), e(P, {
566
566
  modelValue: U.value,
567
- "onUpdate:modelValue": (s) => U.value = s
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: (s) => t("div", null, [t(c("el-button"), {
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(s.row)
581
+ onClick: () => k(u.row)
582
582
  }, {
583
- icon: () => t(c("tds-svg-icon"), {
583
+ icon: () => e(c("tds-svg-icon"), {
584
584
  name: "deployed",
585
585
  tip: "部署"
586
586
  }, null)
587
- }), t(c("el-button"), {
587
+ }), e(c("el-button"), {
588
588
  link: !0,
589
589
  type: "danger",
590
590
  icon: "Delete",
591
- title: _("button.delete"),
592
- onClick: () => O([s.row])
591
+ title: y("button.delete"),
592
+ onClick: () => O([u.row])
593
593
  }, null)])
594
594
  }
595
595
  ]), R = w([]);
596
- function J(s) {
597
- const f = s.raw;
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: (e) => {
618
- const i = R.value[A];
619
- i && (i.progress = e.progress, i.statusText = e.statusText, e.fileMd5 && (i.fileMd5 = e.fileMd5), e.status === "error" ? i.progressStatus = "exception" : e.status === "success" ? i.progressStatus = "success" : i.progressStatus = "");
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 i;
624
- const e = R.value[A];
625
- e && (e.progress = 100, e.progressStatus = "success", e.statusText = "上传成功"), (i = o.value) == null || i.getTableList(), setTimeout(() => {
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: (e) => {
632
- console.error("文件上传失败:", e);
633
- const i = R.value[A];
634
- i && (i.progressStatus = "exception", i.statusText = e.message || "上传失败");
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 (s, f) => {
639
- const N = c("el-icon"), A = c("el-upload"), e = c("el-progress"), i = c("Delete"), B = c("el-button"), L = c("el-table-column");
640
- return h(), x("div", De, [t(A, {
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(() => [t(N, {
650
+ default: b(() => [e(N, {
651
651
  class: "el-icon--upload"
652
652
  }, {
653
- default: b(() => [t(F(me))]),
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(e, {
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, [t(F(_e), {
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: s.$tableOptions()
670
+ options: u.$tableOptions()
671
671
  }, {
672
- default: b(() => [t(L, {
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 ? "安装" : 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", {
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, [t(B, {
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(() => [t(N, {
696
+ default: b(() => [e(N, {
697
697
  size: "20"
698
698
  }, {
699
- default: b(() => [t(i)]),
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"])]), t(F(re), oe({
709
+ }, 8, ["columns", "request-api", "options"])]), e(F(re), oe({
710
710
  ref_key: "refTdsForm",
711
711
  ref: n
712
- }, s.$formBindProps({
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(), _ = w(""), r = w({}), v = w("show"), k = H({
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(e) {
752
- r.value = e ? Object.assign({}, e) : {}, v.value = "show", _.value = e ? "修改服务器" : "添加服务器", m.value.open();
751
+ function g(t) {
752
+ r.value = t ? Object.assign({}, t) : {}, v.value = "show", y.value = t ? "修改服务器" : "添加服务器", m.value.open();
753
753
  }
754
- const u = (e) => {
755
- n(e, "server_name", o("button.delete"), "error").then(async () => {
754
+ const i = (t) => {
755
+ n(t, "server_name", o("button.delete"), "error").then(async () => {
756
756
  await $e({
757
- data: e.map((i) => i.id),
757
+ data: t.map((s) => s.id),
758
758
  service_type: window.$prodType
759
759
  }), a.value.getTableList();
760
760
  });
761
761
  };
762
- function y(e) {
762
+ function _(t) {
763
763
  r.value = {
764
- id: e.id
765
- }, v.value = "deploy", _.value = "快速部署", m.value.open();
764
+ id: t.id
765
+ }, v.value = "deploy", y.value = "快速部署", m.value.open();
766
766
  }
767
- async function U(e) {
768
- n([e], "server_name", o("button.delete"), "error").then(async () => {
767
+ async function U(t) {
768
+ n("是否卸载该探针", "", "卸载", "error").then(async () => {
769
769
  await ue({
770
- deploy_id: [e.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(e) {
788
+ async function R(t) {
789
789
  if (v.value === "show") {
790
790
  r.value.id ? (await Te({
791
791
  data: {
792
- ...e,
792
+ ...t,
793
793
  id: r.value.id
794
794
  }
795
795
  }), a.value.getTableList(), m.value.close()) : (await ke({
796
- data: e
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", e.Name), d.append("EndpointType", "1"), d.append("URL", "tcp://" + e.URL), d.append("PublicURL", e.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({
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 i = (L, d) => {
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: [e.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: e.probe_name || "",
832
- collection_mode: e.collection_mode,
833
- interface: e.interface || "",
834
- engine_ip: e.engine_ip || "",
835
- engine_port: e.engine_port || "",
836
- filterWhitelist: i(M.value, O.value),
837
- filterBlacklist: i(S.value, I.value)
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(e) {
845
- Se({
846
- data: [e.id]
844
+ async function J(t) {
845
+ await Se({
846
+ data: [t.id]
847
847
  }), a.value.getTableList();
848
848
  }
849
- function s(e) {
850
- Ce({
851
- data: [e.id]
849
+ async function u(t) {
850
+ await Ce({
851
+ data: [t.id]
852
852
  }), a.value.getTableList();
853
853
  }
854
- function f(e) {
855
- qe({
856
- data: [e.id]
854
+ async function f(t) {
855
+ await qe({
856
+ data: [t.id]
857
857
  }), a.value.getTableList();
858
858
  }
859
- function N(e) {
860
- v.value = "docker", _.value = "添加容器监控", r.value = {
861
- URL: `${e.ip_address}:${e.ssh_port}`
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: (e) => t("span", null, [e.row.deployment_packages.length])
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: () => t(z, null, [t("p", {
1072
+ render: () => e(z, null, [e("p", {
1073
1073
  class: "color-[var(--el-text-color-regular)]"
1074
- }, [E("源ip端口:")]), t(P, {
1074
+ }, [E("源ip端口:")]), e(P, {
1075
1075
  modelValue: M.value,
1076
- "onUpdate:modelValue": (e) => M.value = e
1077
- }, null), t("p", {
1076
+ "onUpdate:modelValue": (t) => M.value = t
1077
+ }, null), e("p", {
1078
1078
  class: "color-[var(--el-text-color-regular)]"
1079
- }, [E("目的ip端口:")]), t(P, {
1079
+ }, [E("目的ip端口:")]), e(P, {
1080
1080
  modelValue: O.value,
1081
- "onUpdate:modelValue": (e) => O.value = e
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: () => t(z, null, [t("p", {
1091
+ render: () => e(z, null, [e("p", {
1092
1092
  class: "color-[var(--el-text-color-regular)]"
1093
- }, [E("源ip端口:")]), t(P, {
1093
+ }, [E("源ip端口:")]), e(P, {
1094
1094
  modelValue: S.value,
1095
- "onUpdate:modelValue": (e) => S.value = e
1096
- }, null), t("p", {
1095
+ "onUpdate:modelValue": (t) => S.value = t
1096
+ }, null), e("p", {
1097
1097
  class: "color-[var(--el-text-color-regular)]"
1098
- }, [E("目的ip端口:")]), t(P, {
1098
+ }, [E("目的ip端口:")]), e(P, {
1099
1099
  modelValue: I.value,
1100
- "onUpdate:modelValue": (e) => I.value = e
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: (e) => t(z, null, [t(c("el-button"), {
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(e.row)
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: (e) => t("div", null, [t(c("el-button"), {
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(e.row)
1146
- }, null), t(c("el-button"), {
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(e.row)
1153
- }, null), t(c("el-button"), {
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: () => s(e.row)
1156
+ onClick: () => u(t.row)
1158
1157
  }, {
1159
- icon: () => t(c("tds-svg-icon"), {
1158
+ icon: () => e(c("tds-svg-icon"), {
1160
1159
  name: "install_env",
1161
1160
  tip: "测试安装环境"
1162
1161
  }, null)
1163
- }), t(c("el-button"), {
1162
+ }), e(c("el-button"), {
1164
1163
  link: !0,
1165
1164
  type: "primary",
1166
1165
  class: "custom-btn",
1167
- onClick: () => f(e.row)
1166
+ onClick: () => f(t.row)
1168
1167
  }, {
1169
- icon: () => t(c("tds-svg-icon"), {
1168
+ icon: () => e(c("tds-svg-icon"), {
1170
1169
  name: "docker",
1171
1170
  tip: "自动安装docker环境"
1172
1171
  }, null)
1173
- }), t(c("el-button"), {
1172
+ }), e(c("el-button"), {
1174
1173
  link: !0,
1175
1174
  type: "primary",
1176
1175
  class: "custom-btn",
1177
- onClick: () => y(e.row)
1176
+ onClick: () => _(t.row)
1178
1177
  }, {
1179
- icon: () => t(c("tds-svg-icon"), {
1178
+ icon: () => e(c("tds-svg-icon"), {
1180
1179
  name: "deployed",
1181
1180
  tip: "部署"
1182
1181
  }, null)
1183
- }), t(c("el-button"), {
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: () => u([e.row])
1187
+ onClick: () => i([t.row])
1189
1188
  }, null)])
1190
1189
  }]);
1191
- return (e, i) => {
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, [t(j, {
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: e.$tableOptions({
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, [t(B, {
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: i[0] || (i[0] = (D) => g())
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(() => [t(T, {
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, [i[4] || (i[4] = p("div", {
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 ? "安装" : C.deploy_type === 1 ? "升级" : "卸载"), 3), p("div", et, q(C.file_name), 1), p("div", tt, [p("p", lt, [i[1] || (i[1] = p("span", {
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, [i[2] || (i[2] = p("span", {
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, [t(B, {
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(() => [t(d, {
1241
+ default: b(() => [e(d, {
1243
1242
  size: "20"
1244
1243
  }, {
1245
- default: b(() => [t(L)]),
1244
+ default: b(() => [e(L)]),
1246
1245
  _: 1
1247
1246
  })]),
1248
1247
  _: 1
1249
- }, 8, ["onClick"]), i[3] || (i[3] = p("span", {
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"]), t(F(re), oe({
1254
+ }, 8, ["columns", "request-api", "init-param", "options"]), e(F(re), oe({
1256
1255
  ref_key: "refTdsForm",
1257
1256
  ref: m
1258
- }, e.$formBindProps({
1259
- title: _.value,
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: (_) => t(z, null, [t("p", {
1279
+ render: (y) => e(z, null, [e("p", {
1281
1280
  class: "font-bold"
1282
- }, [_.row.packages_name]), t("p", {
1281
+ }, [y.row.packages_name]), e("p", {
1283
1282
  class: "text-gray-400"
1284
- }, [_.row.packages_version])])
1283
+ }, [y.row.packages_version])])
1285
1284
  }, {
1286
1285
  field: "server_name",
1287
1286
  name: "服务器",
1288
- render: (_) => t(z, null, [t("p", {
1287
+ render: (y) => e(z, null, [e("p", {
1289
1288
  class: "font-bold"
1290
- }, [_.row.server_name]), t("p", {
1289
+ }, [y.row.server_name]), e("p", {
1291
1290
  class: "text-gray-400"
1292
- }, [_.row.ip_address])])
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
- }), (_, r) => {
1325
+ }), (y, r) => {
1327
1326
  const v = c("el-table-column"), k = c("TdsTable");
1328
- return h(), x("div", st, [t(k, {
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: _.$tableOptions(),
1333
+ options: y.$tableOptions(),
1335
1334
  "init-param": o,
1336
1335
  "reserve-selection": ""
1337
1336
  }, {
1338
- default: b(() => [t(v, {
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"), _ = c("el-tabs");
1359
+ const m = c("el-tab-pane"), y = c("el-tabs");
1361
1360
  return h(), x("div", dt, [
1362
- t(_, {
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
- t(m, {
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
- t(m, {
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
- t(m, {
1388
+ e(m, {
1390
1389
  label: "部署历史",
1391
1390
  name: "history"
1392
1391
  }, {
@@ -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"}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topdatasec/probe",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "探针部署管理组件",
5
5
  "author": "wangguiwang",
6
6
  "license": "MIT",
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "scripts": {
19
19
  "lib": "node -e \"const fs=require('fs');fs.rmSync('lib',{recursive:true,force:true})\" && vite build",
20
- "pub": "npm publish --access public --registry=https://registry.npmjs.org/",
20
+ "pub": "npm publish --registry=https://registry.npmjs.org/",
21
21
  "prettier": "prettier --write \"packages/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\""
22
22
  },
23
23
  "devDependencies": {