mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-09 03:06:37 +08:00
cdcdfd8ff0
Move custom probe target controls into the tunnel advanced settings and reuse the configured target in tunnel diagnosis output.
93 lines
1.9 KiB
TypeScript
93 lines
1.9 KiB
TypeScript
export interface DiagnosisEntry {
|
|
success?: boolean;
|
|
diagnosing?: boolean;
|
|
description: string;
|
|
nodeName: string;
|
|
nodeId: string;
|
|
targetIp: string;
|
|
targetPort?: number;
|
|
message?: string;
|
|
averageTime?: number;
|
|
packetLoss?: number;
|
|
fromChainType?: number;
|
|
fromInx?: number;
|
|
toChainType?: number;
|
|
toInx?: number;
|
|
}
|
|
|
|
export interface DiagnosisResult {
|
|
tunnelName: string;
|
|
tunnelType: string;
|
|
timestamp: number;
|
|
results: DiagnosisEntry[];
|
|
}
|
|
|
|
export interface DiagnosisFallbackInput {
|
|
tunnelName: string;
|
|
tunnelType: number;
|
|
description: string;
|
|
message: string;
|
|
targetIp?: string;
|
|
targetPort?: number;
|
|
}
|
|
|
|
export const buildDiagnosisFallbackResult = ({
|
|
tunnelName,
|
|
tunnelType,
|
|
description,
|
|
message,
|
|
targetIp = "-",
|
|
targetPort = 443,
|
|
}: DiagnosisFallbackInput): DiagnosisResult => {
|
|
return {
|
|
tunnelName,
|
|
tunnelType: tunnelType === 1 ? "端口转发" : "隧道转发",
|
|
timestamp: Date.now(),
|
|
results: [
|
|
{
|
|
success: false,
|
|
description,
|
|
nodeName: "-",
|
|
nodeId: "-",
|
|
targetIp,
|
|
targetPort,
|
|
message,
|
|
},
|
|
],
|
|
};
|
|
};
|
|
|
|
export const getDiagnosisQualityDisplay = (
|
|
averageTime?: number,
|
|
packetLoss?: number,
|
|
): {
|
|
text: string;
|
|
color: "success" | "primary" | "warning" | "danger";
|
|
} | null => {
|
|
if (averageTime === undefined || packetLoss === undefined) {
|
|
return null;
|
|
}
|
|
|
|
if (averageTime < 30 && packetLoss === 0) {
|
|
return { text: "🚀 优秀", color: "success" };
|
|
}
|
|
|
|
if (averageTime < 50 && packetLoss === 0) {
|
|
return { text: "✨ 很好", color: "success" };
|
|
}
|
|
|
|
if (averageTime < 100 && packetLoss < 1) {
|
|
return { text: "👍 良好", color: "primary" };
|
|
}
|
|
|
|
if (averageTime < 150 && packetLoss < 2) {
|
|
return { text: "😐 一般", color: "warning" };
|
|
}
|
|
|
|
if (averageTime < 200 && packetLoss < 5) {
|
|
return { text: "😟 较差", color: "warning" };
|
|
}
|
|
|
|
return { text: "😵 很差", color: "danger" };
|
|
};
|