mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-06 19:46:52 +03:00
feat: add outbounds checks to diagnostics
This commit is contained in:
@@ -117,6 +117,7 @@
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25"
|
||||
]
|
||||
},
|
||||
@@ -127,6 +128,7 @@
|
||||
"src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15",
|
||||
"src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13"
|
||||
]
|
||||
},
|
||||
@@ -512,12 +514,12 @@
|
||||
"call": "Failed to execute!",
|
||||
"key": "Failed to execute!",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:226",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:230",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:260",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:264",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:298",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:302"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:227",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:231",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:261",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:265",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:299",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:303"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -545,7 +547,7 @@
|
||||
"call": "Global check",
|
||||
"key": "Global check",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:221"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:222"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -805,7 +807,7 @@
|
||||
"call": "Latest",
|
||||
"key": "Latest",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:452"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:453"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -878,6 +880,14 @@
|
||||
"src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Not responding",
|
||||
"key": "Not responding",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59",
|
||||
"src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Not running",
|
||||
"key": "Not running",
|
||||
@@ -885,7 +895,8 @@
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:55",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:63",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:71",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:79"
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:79",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:87"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -920,7 +931,7 @@
|
||||
"call": "Outdated",
|
||||
"key": "Outdated",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:442"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:443"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -962,10 +973,11 @@
|
||||
"call": "Pending",
|
||||
"key": "Pending",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:95",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:103",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:111",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:119"
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:119",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:127",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:135"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1246,7 +1258,7 @@
|
||||
"call": "Show sing-box config",
|
||||
"key": "Show sing-box config",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:289",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:290",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116"
|
||||
]
|
||||
},
|
||||
@@ -1473,13 +1485,13 @@
|
||||
"call": "unknown",
|
||||
"key": "unknown",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:37",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:38",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:39",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:40",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:41",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:42",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:416"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:43",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:417"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1598,7 +1610,7 @@
|
||||
"call": "View logs",
|
||||
"key": "View logs",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:255",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:256",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-23 17:43+0300\n"
|
||||
"PO-Revision-Date: 2025-10-23 17:43+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 22:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 22:08+0300\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -82,6 +82,7 @@ msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr ""
|
||||
@@ -89,6 +90,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
msgid "Checking, please wait"
|
||||
msgstr ""
|
||||
@@ -312,12 +314,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:226
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:230
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:260
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:264
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:298
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:302
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:227
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
@@ -333,7 +335,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:221
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:222
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -482,7 +484,7 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:452
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -526,10 +528,16 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:55
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:63
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:71
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:79
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:87
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -549,7 +557,7 @@ msgstr ""
|
||||
msgid "Outbound JSON must contain at least \"type\", \"server\" and \"server_port\" fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:442
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -573,10 +581,11 @@ msgstr ""
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:95
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:127
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:135
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
@@ -737,7 +746,7 @@ msgstr ""
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -868,13 +877,13 @@ msgstr ""
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:37
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:38
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:39
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:40
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:416
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -948,7 +957,7 @@ msgstr ""
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:256
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-23 20:43+0300\n"
|
||||
"PO-Revision-Date: 2025-10-23 20:43+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 01:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 01:08+0300\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -386,6 +386,9 @@ msgstr "Другие правила маркировки не найдены"
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не запущено"
|
||||
|
||||
|
||||
@@ -29,15 +29,15 @@ export const PodkopShellMethods = {
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXIES,
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY,
|
||||
tag,
|
||||
]),
|
||||
callBaseMethod<Podkop.GetClashApiProxyLatency>(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY, tag],
|
||||
),
|
||||
getClashApiGroupLatency: async (tag: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY,
|
||||
tag,
|
||||
]),
|
||||
callBaseMethod<Podkop.GetClashApiGroupLatency>(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY, tag],
|
||||
),
|
||||
setClashApiGroupProxy: async (group: string, proxy: string) =>
|
||||
callBaseMethod<unknown>(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.SET_GROUP_PROXY,
|
||||
|
||||
@@ -5,6 +5,7 @@ export enum DIAGNOSTICS_CHECKS {
|
||||
SINGBOX = 'SINGBOX',
|
||||
NFT = 'NFT',
|
||||
FAKEIP = 'FAKEIP',
|
||||
OUTBOUNDS = 'OUTBOUNDS',
|
||||
}
|
||||
|
||||
export const DIAGNOSTICS_CHECKS_MAP: Record<
|
||||
@@ -26,8 +27,13 @@ export const DIAGNOSTICS_CHECKS_MAP: Record<
|
||||
title: getCheckTitle('Nftables'),
|
||||
code: DIAGNOSTICS_CHECKS.NFT,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.FAKEIP]: {
|
||||
[DIAGNOSTICS_CHECKS.OUTBOUNDS]: {
|
||||
order: 4,
|
||||
title: getCheckTitle('Outbounds'),
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
},
|
||||
[DIAGNOSTICS_CHECKS.FAKEIP]: {
|
||||
order: 5,
|
||||
title: getCheckTitle('FakeIP'),
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
},
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
||||
import { PodkopShellMethods } from '../../../methods';
|
||||
import { updateCheckStore } from './updateCheckStore';
|
||||
import { getMeta } from '../helpers/getMeta';
|
||||
import { getDashboardSections } from '../../../methods/custom/getDashboardSections';
|
||||
import { IDiagnosticsChecksItem } from '../../../services';
|
||||
|
||||
export async function runSectionsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS;
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checking, please wait'),
|
||||
state: 'loading',
|
||||
items: [],
|
||||
});
|
||||
|
||||
const sections = await getDashboardSections();
|
||||
|
||||
if (!sections.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Cannot receive checks result'),
|
||||
state: 'error',
|
||||
items: [],
|
||||
});
|
||||
|
||||
throw new Error('Sections checks failed');
|
||||
}
|
||||
|
||||
const items = (await Promise.all(
|
||||
sections.data.map(async (section) => {
|
||||
async function getLatency() {
|
||||
if (section.withTagSelect) {
|
||||
const latencyGroup = await PodkopShellMethods.getClashApiGroupLatency(
|
||||
section.code,
|
||||
);
|
||||
console.log('Latency group', latencyGroup);
|
||||
|
||||
const success = latencyGroup.success && !latencyGroup.data.message;
|
||||
|
||||
if (success) {
|
||||
const latency = Object.values(latencyGroup.data)
|
||||
.map((item) => (item ? `${item}ms` : 'n/a'))
|
||||
.join(' / ');
|
||||
|
||||
return {
|
||||
success: true,
|
||||
latency,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
latency: _('Not responding'),
|
||||
};
|
||||
}
|
||||
|
||||
const latencyProxy = await PodkopShellMethods.getClashApiProxyLatency(
|
||||
section.code,
|
||||
);
|
||||
console.log('Latency proxy', latencyProxy);
|
||||
|
||||
const success = latencyProxy.success && !latencyProxy.data.message;
|
||||
|
||||
if (success) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `${latencyProxy.data.delay} ms`,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
latency: _('Not responding'),
|
||||
};
|
||||
}
|
||||
|
||||
const { latency, success } = await getLatency();
|
||||
|
||||
return {
|
||||
state: success ? 'success' : 'error',
|
||||
key: section.displayName,
|
||||
value: latency,
|
||||
};
|
||||
}),
|
||||
)) as Array<IDiagnosticsChecksItem>;
|
||||
|
||||
const allGood = items.every((item) => item.state === 'success');
|
||||
|
||||
const atLeastOneGood = items.some((item) => item.state === 'success');
|
||||
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description,
|
||||
state,
|
||||
items,
|
||||
});
|
||||
|
||||
if (!atLeastOneGood) {
|
||||
throw new Error('Sections checks failed');
|
||||
}
|
||||
}
|
||||
@@ -72,6 +72,14 @@ export const initialDiagnosticStore: Pick<
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _('Not running'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
@@ -112,6 +120,14 @@ export const loadingDiagnosticsChecksStore: Pick<
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.OUTBOUNDS,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _('Pending'),
|
||||
items: [],
|
||||
state: 'skipped',
|
||||
},
|
||||
{
|
||||
code: DIAGNOSTICS_CHECKS.FAKEIP,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
|
||||
@@ -19,6 +19,7 @@ import { renderModal } from '../../../partials';
|
||||
import { PODKOP_LUCI_APP_VERSION } from '../../../constants';
|
||||
import { showToast } from '../../../helpers/showToast';
|
||||
import { renderWikiDisclaimer } from './partials/renderWikiDisclaimer';
|
||||
import { runSectionsCheck } from './checks/runSectionsCheck';
|
||||
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -518,6 +519,8 @@ async function runChecks() {
|
||||
|
||||
await runNftCheck();
|
||||
|
||||
await runSectionsCheck();
|
||||
|
||||
await runFakeIPCheck();
|
||||
} catch (e) {
|
||||
logger.error('[DIAGNOSTIC]', 'runChecks - e', e);
|
||||
|
||||
@@ -196,4 +196,11 @@ export namespace Podkop {
|
||||
openwrt_version: string;
|
||||
device_model: string;
|
||||
}
|
||||
|
||||
export interface GetClashApiProxyLatency {
|
||||
delay: number;
|
||||
message?: string;
|
||||
}
|
||||
|
||||
export type GetClashApiGroupLatency = Record<string, number>;
|
||||
}
|
||||
|
||||
@@ -563,14 +563,14 @@ var PodkopShellMethods = {
|
||||
getClashApiProxies: async () => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXIES
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY,
|
||||
tag
|
||||
]),
|
||||
getClashApiGroupLatency: async (tag) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY,
|
||||
tag
|
||||
]),
|
||||
getClashApiProxyLatency: async (tag) => callBaseMethod(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_PROXY_LATENCY, tag]
|
||||
),
|
||||
getClashApiGroupLatency: async (tag) => callBaseMethod(
|
||||
Podkop.AvailableMethods.CLASH_API,
|
||||
[Podkop.AvailableClashAPIMethods.GET_GROUP_LATENCY, tag]
|
||||
),
|
||||
setClashApiGroupProxy: async (group, proxy) => callBaseMethod(Podkop.AvailableMethods.CLASH_API, [
|
||||
Podkop.AvailableClashAPIMethods.SET_GROUP_PROXY,
|
||||
group,
|
||||
@@ -1004,8 +1004,13 @@ var DIAGNOSTICS_CHECKS_MAP = {
|
||||
title: getCheckTitle("Nftables"),
|
||||
code: "NFT" /* NFT */
|
||||
},
|
||||
["FAKEIP" /* FAKEIP */]: {
|
||||
["OUTBOUNDS" /* OUTBOUNDS */]: {
|
||||
order: 4,
|
||||
title: getCheckTitle("Outbounds"),
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */
|
||||
},
|
||||
["FAKEIP" /* FAKEIP */]: {
|
||||
order: 5,
|
||||
title: getCheckTitle("FakeIP"),
|
||||
code: "FAKEIP" /* FAKEIP */
|
||||
}
|
||||
@@ -1074,6 +1079,14 @@ var initialDiagnosticStore = {
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _("Not running"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "FAKEIP" /* FAKEIP */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
@@ -1110,6 +1123,14 @@ var loadingDiagnosticsChecksStore = {
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "OUTBOUNDS" /* OUTBOUNDS */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.title,
|
||||
order: DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS.order,
|
||||
description: _("Pending"),
|
||||
items: [],
|
||||
state: "skipped"
|
||||
},
|
||||
{
|
||||
code: "FAKEIP" /* FAKEIP */,
|
||||
title: DIAGNOSTICS_CHECKS_MAP.FAKEIP.title,
|
||||
@@ -3685,6 +3706,90 @@ function renderWikiDisclaimer(kind) {
|
||||
]);
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts
|
||||
async function runSectionsCheck() {
|
||||
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS;
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checking, please wait"),
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
const sections = await getDashboardSections();
|
||||
if (!sections.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Cannot receive checks result"),
|
||||
state: "error",
|
||||
items: []
|
||||
});
|
||||
throw new Error("Sections checks failed");
|
||||
}
|
||||
const items = await Promise.all(
|
||||
sections.data.map(async (section) => {
|
||||
async function getLatency() {
|
||||
if (section.withTagSelect) {
|
||||
const latencyGroup = await PodkopShellMethods.getClashApiGroupLatency(
|
||||
section.code
|
||||
);
|
||||
console.log("Latency group", latencyGroup);
|
||||
const success3 = latencyGroup.success && !latencyGroup.data.message;
|
||||
if (success3) {
|
||||
const latency2 = Object.values(latencyGroup.data).map((item) => item ? `${item}ms` : "n/a").join(" / ");
|
||||
return {
|
||||
success: true,
|
||||
latency: latency2
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
latency: _("Not responding")
|
||||
};
|
||||
}
|
||||
const latencyProxy = await PodkopShellMethods.getClashApiProxyLatency(
|
||||
section.code
|
||||
);
|
||||
console.log("Latency proxy", latencyProxy);
|
||||
const success2 = latencyProxy.success && !latencyProxy.data.message;
|
||||
if (success2) {
|
||||
return {
|
||||
success: true,
|
||||
latency: `${latencyProxy.data.delay} ms`
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
latency: _("Not responding")
|
||||
};
|
||||
}
|
||||
const { latency, success } = await getLatency();
|
||||
return {
|
||||
state: success ? "success" : "error",
|
||||
key: section.displayName,
|
||||
value: latency
|
||||
};
|
||||
})
|
||||
);
|
||||
const allGood = items.every((item) => item.state === "success");
|
||||
const atLeastOneGood = items.some((item) => item.state === "success");
|
||||
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description,
|
||||
state,
|
||||
items
|
||||
});
|
||||
if (!atLeastOneGood) {
|
||||
throw new Error("Sections checks failed");
|
||||
}
|
||||
}
|
||||
|
||||
// src/podkop/tabs/diagnostic/initController.ts
|
||||
async function fetchSystemInfo() {
|
||||
const systemInfo = await PodkopShellMethods.getSystemInfo();
|
||||
@@ -4118,6 +4223,7 @@ async function runChecks() {
|
||||
await runDnsCheck();
|
||||
await runSingBoxCheck();
|
||||
await runNftCheck();
|
||||
await runSectionsCheck();
|
||||
await runFakeIPCheck();
|
||||
} catch (e) {
|
||||
logger.error("[DIAGNOSTIC]", "runChecks - e", e);
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-23 20:43+0300\n"
|
||||
"PO-Revision-Date: 2025-10-23 20:43+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 01:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 01:08+0300\n"
|
||||
"Last-Translator: divocat\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -386,6 +386,9 @@ msgstr "Другие правила маркировки не найдены"
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не запущено"
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-10-23 17:43+0300\n"
|
||||
"PO-Revision-Date: 2025-10-23 17:43+0300\n"
|
||||
"POT-Creation-Date: 2025-10-25 22:08+0300\n"
|
||||
"PO-Revision-Date: 2025-10-25 22:08+0300\n"
|
||||
"Last-Translator: divocat <divocatt@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -82,6 +82,7 @@ msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:28
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:27
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:25
|
||||
msgid "Cannot receive checks result"
|
||||
msgstr ""
|
||||
@@ -89,6 +90,7 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runNftCheck.ts:13
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:15
|
||||
#: src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:13
|
||||
msgid "Checking, please wait"
|
||||
msgstr ""
|
||||
@@ -312,12 +314,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:226
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:230
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:260
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:264
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:298
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:302
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:227
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:231
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:261
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:265
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:299
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:303
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
@@ -333,7 +335,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:221
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:222
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -482,7 +484,7 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:452
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:453
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -526,10 +528,16 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:79
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:55
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:63
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:71
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:79
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:87
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -549,7 +557,7 @@ msgstr ""
|
||||
msgid "Outbound JSON must contain at least \"type\", \"server\" and \"server_port\" fields"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:442
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:443
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -573,10 +581,11 @@ msgstr ""
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:95
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:103
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:111
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:119
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:127
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:135
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
@@ -737,7 +746,7 @@ msgstr ""
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -868,13 +877,13 @@ msgstr ""
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:37
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:38
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:39
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:40
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:41
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:42
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:416
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:43
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:417
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -948,7 +957,7 @@ msgstr ""
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:256
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
Reference in New Issue
Block a user