docs: explain instance access, monitoring and resource management
This commit is contained in:
1 parent
ab22d406c0
commit
7f54cae497
10 files changed
+48
No files matched your search
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 通用模块实例管理:服务端按钮能力、图表、扩展展示与日志,升级/支付由子组件和父级协作。 */
|
||||
import "~/assets/styles/CommonUpgrade.C8sZ-ExM.css";
|
||||
import "~/assets/styles/LegacyProductUpgrade.dzWGwGgY.css";
|
||||
import "~/assets/styles/RemfUpgrade.4stQ5ASH.css";
|
||||
@@ -52,6 +53,7 @@ import { r as CommonUpgrade_r } from "~/components/instance/CommonUpgrade.vue";
|
||||
import { s as CommonUpgrade_s } from "~/components/instance/CommonUpgrade.vue";
|
||||
import CommonUpgrade from "~/components/instance/CommonUpgrade.vue";
|
||||
function pe(e, t = () => {}) {
|
||||
// 操作适配器只接受当前 Active 实例中明确 supported 的按钮,动作绑定模块/实例/状态快照。
|
||||
let n = useApi(),
|
||||
r = computed(() => e().module === `remf_finance_common`),
|
||||
o = computed(() =>
|
||||
@@ -105,6 +107,7 @@ function pe(e, t = () => {}) {
|
||||
(l.value = e));
|
||||
}
|
||||
async function te() {
|
||||
// 敏感动作先校验密码/镜像/重装知情确认;自定义动作与内置 provision 使用不同接口。
|
||||
let i = l.value;
|
||||
if (
|
||||
!i ||
|
||||
@@ -415,6 +418,7 @@ var me = {
|
||||
X = 0,
|
||||
Z = 0;
|
||||
async function Q() {
|
||||
// 每张图表独立请求并记录错误;请求身份已变化时整轮结果不再回写。
|
||||
let e = ++X;
|
||||
((G.value = !0), (W.value = {}), (U.value = {}));
|
||||
let t = Math.floor(Date.now() / 1e3) - K.value;
|
||||
@@ -451,6 +455,7 @@ var me = {
|
||||
Y && e === X && (G.value = !1));
|
||||
}
|
||||
async function $() {
|
||||
// 日志按接口分页读取;未获得数组时视为协议错误,而非显示一个误导性的空列表。
|
||||
let e = ++Z;
|
||||
((q.value = !0), (J.value = ``));
|
||||
try {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 物理实例管理外壳:分区展示概要、监控、访问、IP、防护、域名、账务和日志,按需加载子面板。 */
|
||||
import "~/assets/styles/ConfigBandwidth.CWSH1WJZ.css";
|
||||
import "~/assets/styles/DcimUpgrade.DaLApYFa.css";
|
||||
import "~/assets/styles/DcimReinstallStatus.CuXeXmZ3.css";
|
||||
@@ -68,6 +69,7 @@ import progressbar from "primevue/progressbar";
|
||||
import tablist from "primevue/tablist";
|
||||
import tab from "primevue/tab";
|
||||
function Ee(e, t) {
|
||||
// 主信息、远程信息、流量和电源状态独立加载/报错;任一附属接口失败不抹掉其他成功结果。
|
||||
let n = useApi(),
|
||||
i = ref(null),
|
||||
a = ref(null),
|
||||
@@ -98,6 +100,7 @@ function Ee(e, t) {
|
||||
(_.value = v.value = y.value = !1));
|
||||
}
|
||||
async function ee() {
|
||||
// 电源查询独立序号 + 主刷新代次双重校验,防止较慢的旧状态覆盖手动刷新结果。
|
||||
let r = t.value;
|
||||
if (!r || !e || S) return;
|
||||
let i = ++x,
|
||||
@@ -119,6 +122,7 @@ function Ee(e, t) {
|
||||
}
|
||||
}
|
||||
async function w() {
|
||||
// 并行发起互不依赖的详情读取,响应必须仍属于当前模块及本轮刷新。
|
||||
let r = t.value;
|
||||
if (!r || !e || S) {
|
||||
C();
|
||||
@@ -633,6 +637,7 @@ var De = publicAssetsURL(`/images/reference/firewall.png`),
|
||||
Z = 0,
|
||||
Q = !1;
|
||||
async function $() {
|
||||
// IP 分页从界面零基索引换成接口一基页码,切换实例后旧页结果作废。
|
||||
let e = ++Z,
|
||||
t = C.hostId,
|
||||
n = C.module;
|
||||
@@ -677,6 +682,7 @@ var De = publicAssetsURL(`/images/reference/firewall.png`),
|
||||
}),
|
||||
watch(
|
||||
[A, L, Bt, I],
|
||||
// 汇总给父级标题区的数据不暴露原始供应商字段;电源状态失败时明确给空值。
|
||||
() =>
|
||||
w(`presentation`, {
|
||||
region: G.value.region,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<script>
|
||||
/**
|
||||
* 实例访问控制:展示登录信息并编排重置密码、救援、重装及付费镜像确认。
|
||||
* info/caps/detail 来自实例详情适配层;refresh 要求父级回读状态,action-consumed 确认消费外部动作。
|
||||
*/
|
||||
import "~/assets/styles/GeetestField.DiieTibK.css";
|
||||
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
|
||||
import "~/assets/styles/InstanceSmsCode.CsITfIEU.css";
|
||||
@@ -284,6 +288,7 @@ var xe = {
|
||||
(M.value = !0));
|
||||
}
|
||||
async function Rt() {
|
||||
// 站点要求短信时必须带当前验证码;“指令已下发”只表示接口接受,不代表密码已即时生效。
|
||||
if (!N.value) {
|
||||
if (Ft.value && !F.value.trim()) {
|
||||
T.value = `请输入账户手机验证码`;
|
||||
@@ -346,6 +351,7 @@ var xe = {
|
||||
(R.value = !0));
|
||||
}
|
||||
async function Ht(e) {
|
||||
// 财务模块的救援密码字段和退出路径不同,必须保留模块差异,不能统一拼一个接口。
|
||||
if (!Bt.value || L.value) return;
|
||||
let t = q;
|
||||
((L.value = !0), D());
|
||||
@@ -416,6 +422,7 @@ var xe = {
|
||||
Q = computed(() => x.module === `kky_ecs`),
|
||||
$ = computed(() => x.module === `remf_finance`);
|
||||
async function qt() {
|
||||
// 镜像来源随模块变化:财务模块读取详情内嵌列表,智简模块需要当前节点参数。
|
||||
if (!x.caps.reinstall || V.value.length) return;
|
||||
let e = q;
|
||||
Ut.value = !0;
|
||||
@@ -486,6 +493,7 @@ var xe = {
|
||||
}
|
||||
}
|
||||
async function Jt() {
|
||||
// SSH 密钥需要读取全部分页并去重;服务端分页无进展时报告错误,不能静默截断选项。
|
||||
if (!x.caps.reinstall || Wt.value.length || K.value) return;
|
||||
let e = q;
|
||||
((K.value = !0), (Gt.value = ``));
|
||||
@@ -540,6 +548,7 @@ var xe = {
|
||||
immediate: !0,
|
||||
});
|
||||
function Qt() {
|
||||
// 重装前确认验证码、系统及密码/密钥,再打开二次确认,避免单次点击直接破坏实例数据。
|
||||
if (It.value && !I.value.trim()) {
|
||||
T.value = `请输入账户手机验证码`;
|
||||
return;
|
||||
@@ -570,6 +579,8 @@ var xe = {
|
||||
S(`refresh`)));
|
||||
}
|
||||
async function en() {
|
||||
// 重装提交绑定实例和镜像快照;支持的模块先检查镜像价格,付费镜像进入购买确认。
|
||||
// 财务、快快云与其他云模块的重装字段不同,保留既有协议而非按显示文案猜字段。
|
||||
if (!x.caps.reinstall || H.value || J) return;
|
||||
if (It.value && !I.value.trim()) {
|
||||
T.value = `请输入账户手机验证码`;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 实例磁盘管理:能力允许时挂卸载、扩容和新增数据盘;需要付款的操作发 pay 交给父级处理。 */
|
||||
import "~/assets/styles/InstanceDisks.Ca7NZxYd.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -151,6 +152,7 @@ var ge = [`aria-busy`],
|
||||
k = 0,
|
||||
He = 0;
|
||||
async function Ue(e) {
|
||||
// 操作对象必须仍在当前磁盘列表;挂/卸载按现有状态决定,不支持状态不发请求。
|
||||
if (
|
||||
E ||
|
||||
w.value ||
|
||||
@@ -280,6 +282,7 @@ var ge = [`aria-busy`],
|
||||
}
|
||||
}
|
||||
function Ke() {
|
||||
// 只允许普通数据盘扩容,目标容量必须为大于当前值的安全整数,赠送盘不可扩容。
|
||||
let e = N.value,
|
||||
t = y.disks.find((t) => t.ident === e?.ident);
|
||||
if (
|
||||
@@ -350,6 +353,7 @@ var ge = [`aria-busy`],
|
||||
((B.value = q.value?.min ?? 0), $());
|
||||
}
|
||||
async function Ze(e) {
|
||||
// 新增/扩容询价都绑定完整输入快照,磁盘、实例或权限变化即清空报价。
|
||||
if (
|
||||
(We(),
|
||||
!T.value ||
|
||||
@@ -389,6 +393,7 @@ var ge = [`aria-busy`],
|
||||
let Q = () => Ze(`resize`),
|
||||
$ = () => Ze(`add`);
|
||||
async function Qe(e) {
|
||||
// 只有当前有效报价可创建磁盘订单;订单 ID 归一化后通知父级接续支付。
|
||||
if (!Z.value || !T.value || !(e === `resize` ? A.value : L.value))
|
||||
return;
|
||||
let t = e === `resize` ? M : z,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 云实例标签页编排层:detail 提供统一详情与能力,tab 双向绑定当前面板,子面板按需加载。 */
|
||||
import "~/assets/styles/InstanceTraffic.CyyEAXl3.css";
|
||||
import "~/assets/styles/RingProgress.CVwR7il5.css";
|
||||
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
|
||||
@@ -213,6 +214,7 @@ var oe = defineAsyncComponent(() =>
|
||||
J.value = Y.value.some((t) => t.value === e) ? e : `overview`;
|
||||
}
|
||||
function ce(e) {
|
||||
// 顶部重装/救援入口先确认实例状态与能力,再用唯一动作号交给访问面板消费。
|
||||
q.value &&
|
||||
(e !== `rescue` || H.value.rescue) &&
|
||||
(e !== `reinstall` || H.value.reinstall) &&
|
||||
@@ -227,6 +229,7 @@ var oe = defineAsyncComponent(() =>
|
||||
}
|
||||
watch(
|
||||
[Y, J],
|
||||
// 模块能力变化可能移除当前标签;始终回到有效概要页而不是停留在不存在的面板。
|
||||
([e, t]) => {
|
||||
e.some((e) => e.value === t) || (J.value = `overview`);
|
||||
},
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 多模块监控图表:统一 CPU/内存/带宽/磁盘系列,保留各模块时间单位与指标口径差异。 */
|
||||
import "~/assets/styles/InstanceMonitor.B0X15iQt.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { renderList } from "vue";
|
||||
@@ -128,6 +129,7 @@ var O = defineAsyncComponent(() =>
|
||||
return `${String(t.getHours()).padStart(2, `0`)}:${String(t.getMinutes()).padStart(2, `0`)}`;
|
||||
};
|
||||
async function te(e, t, n = `mf_cloud`) {
|
||||
// 云模块各指标并行读取并分别展示失败;物理智简只请求实际支持的带宽图。
|
||||
let r = [
|
||||
{
|
||||
type: `cpu`,
|
||||
@@ -254,6 +256,7 @@ var O = defineAsyncComponent(() =>
|
||||
});
|
||||
}
|
||||
async function ne(e, t, n) {
|
||||
// 财务接口使用毫秒起止时间,CPU/内存交给专用转换器,其他系列保留服务端单位。
|
||||
let r = [
|
||||
{
|
||||
type: `cpu`,
|
||||
@@ -336,6 +339,7 @@ var O = defineAsyncComponent(() =>
|
||||
});
|
||||
}
|
||||
async function re(e) {
|
||||
// 快快云监控时间范围由接口决定,带宽值按其既有口径从千分单位转换为 Mbps。
|
||||
let t = await y.get(`/kky_ecs/monitor/${e}`),
|
||||
n = (t.sample_info ?? []).map((e) =>
|
||||
String(e.timestamp ?? ``).slice(11, 16),
|
||||
@@ -361,6 +365,7 @@ var O = defineAsyncComponent(() =>
|
||||
];
|
||||
}
|
||||
async function $() {
|
||||
// 请求绑定模块、实例和所选时间窗;相同窗口刷新可留旧图,不同窗口先清空避免误读。
|
||||
if (J) return;
|
||||
let e = ++q,
|
||||
t = g.hostId,
|
||||
@@ -401,6 +406,7 @@ var O = defineAsyncComponent(() =>
|
||||
}
|
||||
let ae = (e) => e.series.some((e) => e.data.some((e) => e !== null));
|
||||
function oe(e) {
|
||||
// 缺测点保持 null,不插值连接;百分比轴上限和单位来自归一化指标定义。
|
||||
let t = S.isDark.value ? `#a1a1aa` : `#94a3b8`,
|
||||
n = S.isDark.value ? `rgba(255,255,255,.08)` : `rgba(0,0,0,.06)`;
|
||||
return {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 实例网络与安全面板:合并 IP 展示、模块流量、域名白名单能力及快快云内网 IP 分配。 */
|
||||
import "~/assets/styles/MfCloudDefence.B2vl5Yip.css";
|
||||
import "~/assets/styles/MfCloudVpc.CpOEbuWs.css";
|
||||
import "~/assets/styles/MfCloudIps.jhFnuvcs.css";
|
||||
@@ -205,6 +206,7 @@ var ce = {
|
||||
(N.value = ``));
|
||||
}
|
||||
async function Ve() {
|
||||
// 仅无内网 IP 且电源状态允许的快快云实例可申请;接口未返回地址时显示处理中而非重复申请。
|
||||
if (z || j.value || !L.value) return;
|
||||
let e = T.hostId,
|
||||
t = ++R,
|
||||
@@ -265,6 +267,7 @@ var ce = {
|
||||
);
|
||||
}
|
||||
async function Z(e) {
|
||||
// 先确认白名单能力,再读最新记录;明确“不支持”与网络/协议错误必须分别展示。
|
||||
let t = ++X,
|
||||
n = () => t === X && T.hostId === e;
|
||||
((G.value = `loading`),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 云实例概要:展示规范化配置、流量和近 24 小时资源趋势,并向父级发出切换标签/操作意图。 */
|
||||
import "~/assets/styles/InstanceTraffic.CyyEAXl3.css";
|
||||
import "~/assets/styles/FlowPacketPanel.-RJSx13z.css";
|
||||
import "~/assets/styles/RingProgress.CVwR7il5.css";
|
||||
@@ -301,6 +302,7 @@ var le = defineAsyncComponent(() =>
|
||||
let xt = (e) => (e.status === `fulfilled` ? e.value : null),
|
||||
St = (e) => (e instanceof Error ? e.message : `网络监控加载失败`);
|
||||
async function Y() {
|
||||
// 不同模块的监控时间单位和返回结构不同,分支完成协议转换;实例切换后拒绝旧响应。
|
||||
if (q) return;
|
||||
let e = ++K,
|
||||
t = x.hostId,
|
||||
@@ -563,6 +565,7 @@ var le = defineAsyncComponent(() =>
|
||||
: 0,
|
||||
);
|
||||
function Tt(e) {
|
||||
// CPU/内存趋势以百分比绘制;null 表示缺测,禁止连接缺失点伪造连续数据。
|
||||
return {
|
||||
grid: {
|
||||
left: 7,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 流量展示适配层:一般模块使用父级 flow,快快云按实例独立请求并经 instance-data 统一口径。 */
|
||||
import "~/assets/styles/InstanceTraffic.CyyEAXl3.css";
|
||||
import { toDisplayString } from "vue";
|
||||
import { onMounted } from "vue";
|
||||
@@ -133,6 +134,7 @@ var w = [`aria-busy`],
|
||||
X = 0,
|
||||
Z = !1;
|
||||
async function Q() {
|
||||
// unavailable 是统计不可用,不等同于“未用流量”;请求响应绑定模块、实例和代次。
|
||||
if (Z) return;
|
||||
let e = ++X,
|
||||
t = y.hostId,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<script>
|
||||
/** 旧财务独立服务器详情的展示适配层;原始 data/加载状态由父级提供,不据此宣称支持统一电源控制。 */
|
||||
import "~/assets/styles/LegacyDcimActions.DcIrQby6.css";
|
||||
import "~/assets/styles/InstanceLoadingShell.CwfiUwdU.css";
|
||||
import "~/assets/styles/LegacyProductUpgrade.dzWGwGgY.css";
|
||||
@@ -82,6 +83,8 @@ function k(e) {
|
||||
return Number.isFinite(t) && t >= 0 ? t : null;
|
||||
}
|
||||
function A(e) {
|
||||
// 旧协议可能把对象/数组包成 JSON 文本,归一化后提取 IP、系统、可见自定义字段与流量。
|
||||
// 总流量为 0 明确表示不限量,缺少字段则保留 null,不能混成“已用 0”。
|
||||
let t = T(e),
|
||||
n = T(t.host_data),
|
||||
r = T(t.dcim),
|
||||
@@ -373,6 +376,7 @@ var j = defineAsyncComponent(() =>
|
||||
let Y = 0,
|
||||
X = !1;
|
||||
async function Z(e, t) {
|
||||
// 剪贴板异步完成时核对实例与请求序号,避免在切换详情后显示上一实例复制成功。
|
||||
if (!e) return;
|
||||
let n = ++Y,
|
||||
r = v.hostId;
|
||||
|
||||
Reference in new issue
Block a user