feat(diagnostics): нативная кнопка проверки сервисов

Реализована нативная проверка сервисов (watchdog, telegram, sing-box) через ucode, избавляя от внешней зависимости forkop-servicecheck.
This commit is contained in:
Dushnilin
2026-08-12 10:42:09 +03:00
parent 2b4d8cd4e0
commit 2bd2fd7645
15 changed files with 1059 additions and 210 deletions
+183 -69
View File
@@ -366,24 +366,24 @@
"call": "AI Doctor Diagnosis",
"key": "AI Doctor Diagnosis",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:850",
"src/tachyon/tabs/diagnostic/initController.ts:1206"
"src/tachyon/tabs/diagnostic/initController.ts:855",
"src/tachyon/tabs/diagnostic/initController.ts:1211"
]
},
{
"call": "AI Doctor Diagnostic Scan in Progress...",
"key": "AI Doctor Diagnostic Scan in Progress...",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:822"
"src/tachyon/tabs/diagnostic/initController.ts:827"
]
},
{
"call": "AI Doctor failed",
"key": "AI Doctor failed",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:873",
"src/tachyon/tabs/diagnostic/initController.ts:1212",
"src/tachyon/tabs/diagnostic/initController.ts:1221"
"src/tachyon/tabs/diagnostic/initController.ts:878",
"src/tachyon/tabs/diagnostic/initController.ts:1217",
"src/tachyon/tabs/diagnostic/initController.ts:1226"
]
},
{
@@ -443,7 +443,7 @@
"call": "All fixes applied successfully",
"key": "All fixes applied successfully",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1063"
"src/tachyon/tabs/diagnostic/initController.ts:1068"
]
},
{
@@ -552,11 +552,18 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8005"
]
},
{
"call": "An error occurred while checking services.",
"key": "An error occurred while checking services.",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:165"
]
},
{
"call": "Analyzing system log (logread & errors)",
"key": "Analyzing system log (logread & errors)",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:804"
"src/tachyon/tabs/diagnostic/initController.ts:809"
]
},
{
@@ -584,14 +591,14 @@
"call": "Applying all fixes...",
"key": "Applying all fixes...",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1052"
"src/tachyon/tabs/diagnostic/initController.ts:1057"
]
},
{
"call": "Applying fix",
"key": "Applying fix",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1019"
"src/tachyon/tabs/diagnostic/initController.ts:1024"
]
},
{
@@ -733,7 +740,7 @@
"call": "Available actions",
"key": "Available actions",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:50"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:52"
]
},
{
@@ -814,7 +821,7 @@
"call": "Bug report downloaded",
"key": "Bug report downloaded",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1346"
"src/tachyon/tabs/diagnostic/initController.ts:1351"
]
},
{
@@ -1017,6 +1024,14 @@
"src/tachyon/tabs/dashboard/partials/renderSections.ts:859"
]
},
{
"call": "Check Custom Domain",
"key": "Check Custom Domain",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:115",
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:131"
]
},
{
"call": "Check interval",
"key": "Check interval",
@@ -1026,6 +1041,13 @@
"src/tachyon/tabs/dashboard/initController.ts:1230"
]
},
{
"call": "Check Services",
"key": "Check Services",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:136"
]
},
{
"call": "Check timeout after which the server is considered dead",
"key": "Check timeout after which the server is considered dead",
@@ -1060,35 +1082,35 @@
"call": "Checking nftables filtering tables",
"key": "Checking nftables filtering tables",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:803"
"src/tachyon/tabs/diagnostic/initController.ts:808"
]
},
{
"call": "Checking sing-box service & DNSmasq",
"key": "Checking sing-box service & DNSmasq",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:802"
"src/tachyon/tabs/diagnostic/initController.ts:807"
]
},
{
"call": "Checking WAN interfaces & network routing",
"key": "Checking WAN interfaces & network routing",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:801"
"src/tachyon/tabs/diagnostic/initController.ts:806"
]
},
{
"call": "Checking Zapret & ByeDPI rules",
"key": "Checking Zapret & ByeDPI rules",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:805"
"src/tachyon/tabs/diagnostic/initController.ts:810"
]
},
{
"call": "Checking, please wait",
"key": "Checking, please wait",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1628",
"src/tachyon/tabs/diagnostic/initController.ts:1639",
"src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:14",
"src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15",
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15",
@@ -1129,17 +1151,17 @@
"call": "Checks failed",
"key": "Checks failed",
"places": [
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10",
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26"
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26",
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10"
]
},
{
"call": "Checks passed",
"key": "Checks passed",
"places": [
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13",
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23",
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43",
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13"
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43"
]
},
{
@@ -1249,9 +1271,10 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717",
"src/partials/modal/renderModal.ts:263",
"src/tachyon/tabs/dashboard/initController.ts:1085",
"src/tachyon/tabs/diagnostic/initController.ts:1194",
"src/tachyon/tabs/diagnostic/initController.ts:1199",
"src/tachyon/tabs/monitoring/initController.ts:884",
"src/tachyon/tabs/monitoring/initController.ts:934"
"src/tachyon/tabs/monitoring/initController.ts:934",
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:28"
]
},
{
@@ -1448,7 +1471,7 @@
"places": [
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693",
"src/partials/modal/renderModal.ts:258",
"src/tachyon/tabs/diagnostic/initController.ts:1189"
"src/tachyon/tabs/diagnostic/initController.ts:1194"
]
},
{
@@ -1478,7 +1501,7 @@
"call": "Current Diagnosis",
"key": "Current Diagnosis",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1157"
"src/tachyon/tabs/diagnostic/initController.ts:1162"
]
},
{
@@ -1524,6 +1547,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7720"
]
},
{
"call": "Custom domain (e.g. google.com)",
"key": "Custom domain (e.g. google.com)",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:113"
]
},
{
"call": "Custom OpenAI-Compatible API (OpenRouter)",
"key": "Custom OpenAI-Compatible API (OpenRouter)",
@@ -1698,7 +1728,7 @@
"call": "Disable autostart",
"key": "Disable autostart",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88"
]
},
{
@@ -1975,17 +2005,17 @@
"call": "Doctor failed",
"key": "Doctor failed",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:715",
"src/tachyon/tabs/diagnostic/initController.ts:753",
"src/tachyon/tabs/diagnostic/initController.ts:761"
"src/tachyon/tabs/diagnostic/initController.ts:720",
"src/tachyon/tabs/diagnostic/initController.ts:758",
"src/tachyon/tabs/diagnostic/initController.ts:766"
]
},
{
"call": "Doctor repair",
"key": "Doctor repair",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:731",
"src/tachyon/tabs/diagnostic/initController.ts:740"
"src/tachyon/tabs/diagnostic/initController.ts:736",
"src/tachyon/tabs/diagnostic/initController.ts:745"
]
},
{
@@ -2250,7 +2280,7 @@
"call": "Enable autostart",
"key": "Enable autostart",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:96"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:98"
]
},
{
@@ -2623,7 +2653,7 @@
"call": "Failed to apply fix",
"key": "Failed to apply fix",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1039"
"src/tachyon/tabs/diagnostic/initController.ts:1044"
]
},
{
@@ -2662,11 +2692,18 @@
"src/tachyon/tabs/updates/initController.ts:774"
]
},
{
"call": "Failed to execute service check.",
"key": "Failed to execute service check.",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:44"
]
},
{
"call": "Failed to generate bug report",
"key": "Failed to generate bug report",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1349"
"src/tachyon/tabs/diagnostic/initController.ts:1354"
]
},
{
@@ -2684,6 +2721,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8246"
]
},
{
"call": "Failed to parse service check results.",
"key": "Failed to parse service check results.",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:52"
]
},
{
"call": "Failed to parse WARP config:",
"key": "Failed to parse WARP config:",
@@ -2817,6 +2861,13 @@
"src/tachyon/methods/custom/getDashboardSections.ts:654"
]
},
{
"call": "Fetching service status, please wait...",
"key": "Fetching service status, please wait...",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:19"
]
},
{
"call": "Filter the servers that will be displayed on the dashboard.",
"key": "Filter the servers that will be displayed on the dashboard.",
@@ -2842,14 +2893,14 @@
"call": "Fix All",
"key": "Fix All",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1050"
"src/tachyon/tabs/diagnostic/initController.ts:1055"
]
},
{
"call": "Fix applied",
"key": "Fix applied",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1034"
"src/tachyon/tabs/diagnostic/initController.ts:1039"
]
},
{
@@ -2864,8 +2915,8 @@
"call": "Fixed",
"key": "Fixed",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:737",
"src/tachyon/tabs/diagnostic/initController.ts:1030"
"src/tachyon/tabs/diagnostic/initController.ts:742",
"src/tachyon/tabs/diagnostic/initController.ts:1035"
]
},
{
@@ -2942,7 +2993,7 @@
"call": "Generate bug report",
"key": "Generate bug report",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:151"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:163"
]
},
{
@@ -3029,14 +3080,14 @@
"call": "Get global check",
"key": "Get global check",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107"
]
},
{
"call": "Global check",
"key": "Global check",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:691"
"src/tachyon/tabs/diagnostic/initController.ts:696"
]
},
{
@@ -3245,6 +3296,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9549"
]
},
{
"call": "HTTP (ms)",
"key": "HTTP (ms)",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:67"
]
},
{
"call": "HTTP error",
"key": "HTTP error",
@@ -4026,6 +4084,13 @@
"src/validators/validateVmessUrl.ts:68"
]
},
{
"call": "IP / DNS",
"key": "IP / DNS",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:64"
]
},
{
"call": "IP Addresses (IP CIDR)",
"key": "IP Addresses (IP CIDR)",
@@ -4065,15 +4130,15 @@
"call": "Issues",
"key": "Issues",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:733"
"src/tachyon/tabs/diagnostic/initController.ts:738"
]
},
{
"call": "Issues detected",
"key": "Issues detected",
"places": [
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17",
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20"
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20",
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17"
]
},
{
@@ -4753,7 +4818,7 @@
"call": "No diagnostic history available yet.",
"key": "No diagnostic history available yet.",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1092"
"src/tachyon/tabs/diagnostic/initController.ts:1097"
]
},
{
@@ -4763,6 +4828,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1510"
]
},
{
"call": "No domains found to check.",
"key": "No domains found to check.",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:57"
]
},
{
"call": "No enabled server inbounds configured",
"key": "No enabled server inbounds configured",
@@ -4781,7 +4853,7 @@
"call": "No issues found",
"key": "No issues found",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:740"
"src/tachyon/tabs/diagnostic/initController.ts:745"
]
},
{
@@ -4802,7 +4874,7 @@
"call": "No quick fix required",
"key": "No quick fix required",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1082"
"src/tachyon/tabs/diagnostic/initController.ts:1087"
]
},
{
@@ -4921,11 +4993,11 @@
"call": "Not running",
"key": "Not running",
"places": [
"src/tachyon/tabs/diagnostic/diagnostic.store.ts:137",
"src/tachyon/tabs/diagnostic/initController.ts:122",
"src/tachyon/tabs/diagnostic/initController.ts:352",
"src/tachyon/tabs/diagnostic/initController.ts:410",
"src/tachyon/tabs/diagnostic/initController.ts:496"
"src/tachyon/tabs/diagnostic/diagnostic.store.ts:140",
"src/tachyon/tabs/diagnostic/initController.ts:123",
"src/tachyon/tabs/diagnostic/initController.ts:353",
"src/tachyon/tabs/diagnostic/initController.ts:411",
"src/tachyon/tabs/diagnostic/initController.ts:497"
]
},
{
@@ -5173,6 +5245,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7696"
]
},
{
"call": "Outbound",
"key": "Outbound",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:63"
]
},
{
"call": "outbounds must be a non-empty array of strings",
"key": "outbounds must be a non-empty array of strings",
@@ -5695,7 +5774,7 @@
"call": "Recommended Smart Quick Fixes:",
"key": "Recommended Smart Quick Fixes:",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1002"
"src/tachyon/tabs/diagnostic/initController.ts:1007"
]
},
{
@@ -5850,7 +5929,7 @@
"call": "Restart Tachyon",
"key": "Restart Tachyon",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:56"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:58"
]
},
{
@@ -6017,7 +6096,7 @@
"call": "Run AI Doctor",
"key": "Run AI Doctor",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:124"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:126"
]
},
{
@@ -6031,14 +6110,14 @@
"call": "Run doctor repair",
"key": "Run doctor repair",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116"
]
},
{
"call": "Run History",
"key": "Run History",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1169"
"src/tachyon/tabs/diagnostic/initController.ts:1174"
]
},
{
@@ -6134,6 +6213,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:432"
]
},
{
"call": "Section / Domain",
"key": "Section / Domain",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:62"
]
},
{
"call": "Section action",
"key": "Section action",
@@ -6534,7 +6620,14 @@
"places": [
"src/tachyon/methods/shell/index.ts:401",
"src/tachyon/methods/shell/index.ts:422",
"src/tachyon/tabs/diagnostic/initController.ts:603"
"src/tachyon/tabs/diagnostic/initController.ts:604"
]
},
{
"call": "Service Health Check",
"key": "Service Health Check",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:24"
]
},
{
@@ -6627,8 +6720,8 @@
"call": "Show sing-box config",
"key": "Show sing-box config",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1282",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142"
"src/tachyon/tabs/diagnostic/initController.ts:1287",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154"
]
},
{
@@ -6754,7 +6847,7 @@
"call": "Some fixes failed",
"key": "Some fixes failed",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1067"
"src/tachyon/tabs/diagnostic/initController.ts:1072"
]
},
{
@@ -6919,7 +7012,7 @@
"call": "Start Tachyon",
"key": "Start Tachyon",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78"
]
},
{
@@ -6970,7 +7063,7 @@
"call": "Stop Tachyon",
"key": "Stop Tachyon",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:66"
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:68"
]
},
{
@@ -7274,6 +7367,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:3097"
]
},
{
"call": "TCP (ms)",
"key": "TCP (ms)",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:65"
]
},
{
"call": "Telegram Bot",
"key": "Telegram Bot",
@@ -7482,6 +7582,13 @@
"src/tachyon/helpers/singBoxVariant.ts:64"
]
},
{
"call": "TLS (ms)",
"key": "TLS (ms)",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:66"
]
},
{
"call": "TLS / HTTPS",
"key": "TLS / HTTPS",
@@ -7857,10 +7964,10 @@
"key": "Unknown error",
"places": [
"src/tachyon/api.ts:40",
"src/tachyon/tabs/diagnostic/initController.ts:715",
"src/tachyon/tabs/diagnostic/initController.ts:752",
"src/tachyon/tabs/diagnostic/initController.ts:873",
"src/tachyon/tabs/diagnostic/initController.ts:1211"
"src/tachyon/tabs/diagnostic/initController.ts:720",
"src/tachyon/tabs/diagnostic/initController.ts:757",
"src/tachyon/tabs/diagnostic/initController.ts:878",
"src/tachyon/tabs/diagnostic/initController.ts:1216"
]
},
{
@@ -8254,6 +8361,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1837"
]
},
{
"call": "Verdict",
"key": "Verdict",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:68"
]
},
{
"call": "Via country.is",
"key": "Via country.is",
@@ -8265,8 +8379,8 @@
"call": "View logs",
"key": "View logs",
"places": [
"src/tachyon/tabs/diagnostic/initController.ts:1247",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133"
"src/tachyon/tabs/diagnostic/initController.ts:1252",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145"
]
},
{
+133 -67
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 19:28+0300\n"
"PO-Revision-Date: 2026-08-11 19:28+0300\n"
"POT-Creation-Date: 2026-08-12 07:20+0300\n"
"PO-Revision-Date: 2026-08-12 07:20+0300\n"
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -232,18 +232,18 @@ msgstr ""
msgid "AI Doctor (ChatGPT / DeepSeek API)"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:850
#: src/tachyon/tabs/diagnostic/initController.ts:1206
#: src/tachyon/tabs/diagnostic/initController.ts:855
#: src/tachyon/tabs/diagnostic/initController.ts:1211
msgid "AI Doctor Diagnosis"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:822
#: src/tachyon/tabs/diagnostic/initController.ts:827
msgid "AI Doctor Diagnostic Scan in Progress..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:873
#: src/tachyon/tabs/diagnostic/initController.ts:1212
#: src/tachyon/tabs/diagnostic/initController.ts:1221
#: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1217
#: src/tachyon/tabs/diagnostic/initController.ts:1226
msgid "AI Doctor failed"
msgstr ""
@@ -279,7 +279,7 @@ msgstr ""
msgid "All except selected"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1063
#: src/tachyon/tabs/diagnostic/initController.ts:1068
msgid "All fixes applied successfully"
msgstr ""
@@ -344,7 +344,11 @@ msgstr ""
msgid "AmneziaWG Generator"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:804
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:165
msgid "An error occurred while checking services."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:809
msgid "Analyzing system log (logread & errors)"
msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Apply section rules only to the specified local IP addresses"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1052
#: src/tachyon/tabs/diagnostic/initController.ts:1057
msgid "Applying all fixes..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1019
#: src/tachyon/tabs/diagnostic/initController.ts:1024
msgid "Applying fix"
msgstr ""
@@ -446,7 +450,7 @@ msgstr ""
msgid "Automatically update remote hosts lists on schedule"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:50
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:52
msgid "Available actions"
msgstr ""
@@ -494,7 +498,7 @@ msgstr ""
msgid "Browser is using FakeIP correctly"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1346
#: src/tachyon/tabs/diagnostic/initController.ts:1351
msgid "Bug report downloaded"
msgstr ""
@@ -617,12 +621,21 @@ msgstr ""
msgid "Check Connection"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:115
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:131
msgid "Check Custom Domain"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2636
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099
#: src/tachyon/tabs/dashboard/initController.ts:1230
msgid "Check interval"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:136
msgid "Check Services"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112
msgid "Check timeout after which the server is considered dead"
msgstr ""
@@ -641,23 +654,23 @@ msgstr ""
msgid "Checking Connection..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:803
#: src/tachyon/tabs/diagnostic/initController.ts:808
msgid "Checking nftables filtering tables"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:802
#: src/tachyon/tabs/diagnostic/initController.ts:807
msgid "Checking sing-box service & DNSmasq"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:801
#: src/tachyon/tabs/diagnostic/initController.ts:806
msgid "Checking WAN interfaces & network routing"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:805
#: src/tachyon/tabs/diagnostic/initController.ts:810
msgid "Checking Zapret & ByeDPI rules"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1628
#: src/tachyon/tabs/diagnostic/initController.ts:1639
#: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:14
#: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15
@@ -686,14 +699,14 @@ msgstr ""
msgid "checks"
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
msgid "Checks failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
msgid "Checks passed"
msgstr ""
@@ -758,9 +771,10 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717
#: src/partials/modal/renderModal.ts:263
#: src/tachyon/tabs/dashboard/initController.ts:1085
#: src/tachyon/tabs/diagnostic/initController.ts:1194
#: src/tachyon/tabs/diagnostic/initController.ts:1199
#: src/tachyon/tabs/monitoring/initController.ts:884
#: src/tachyon/tabs/monitoring/initController.ts:934
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:28
msgid "Close"
msgstr ""
@@ -876,7 +890,7 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693
#: src/partials/modal/renderModal.ts:258
#: src/tachyon/tabs/diagnostic/initController.ts:1189
#: src/tachyon/tabs/diagnostic/initController.ts:1194
msgid "Copy"
msgstr ""
@@ -894,7 +908,7 @@ msgstr ""
msgid "Country code (e.g. ru, us, de)"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1157
#: src/tachyon/tabs/diagnostic/initController.ts:1162
msgid "Current Diagnosis"
msgstr ""
@@ -923,6 +937,10 @@ msgstr ""
msgid "Custom DNS Records (Hosts)"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:113
msgid "Custom domain (e.g. google.com)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1271
msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr ""
@@ -1021,7 +1039,7 @@ msgstr ""
msgid "Direct connection"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88
msgid "Disable autostart"
msgstr ""
@@ -1184,14 +1202,14 @@ msgstr ""
msgid "Do not test specified servers."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:715
#: src/tachyon/tabs/diagnostic/initController.ts:753
#: src/tachyon/tabs/diagnostic/initController.ts:761
#: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:758
#: src/tachyon/tabs/diagnostic/initController.ts:766
msgid "Doctor failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:731
#: src/tachyon/tabs/diagnostic/initController.ts:740
#: src/tachyon/tabs/diagnostic/initController.ts:736
#: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "Doctor repair"
msgstr ""
@@ -1345,7 +1363,7 @@ msgstr ""
msgid "Enable automatic updates for remote lists and rule sets"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:96
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:98
msgid "Enable autostart"
msgstr ""
@@ -1568,7 +1586,7 @@ msgstr ""
msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1039
#: src/tachyon/tabs/diagnostic/initController.ts:1044
msgid "Failed to apply fix"
msgstr ""
@@ -1596,7 +1614,11 @@ msgstr ""
msgid "Failed to execute"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1349
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:44
msgid "Failed to execute service check."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1354
msgid "Failed to generate bug report"
msgstr ""
@@ -1609,6 +1631,10 @@ msgstr ""
msgid "Failed to parse file:"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:52
msgid "Failed to parse service check results."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148
msgid "Failed to parse WARP config:"
msgstr ""
@@ -1688,6 +1714,10 @@ msgstr ""
msgid "Fastest"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:19
msgid "Fetching service status, please wait..."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312
msgid "Filter the servers that will be displayed on the dashboard."
msgstr ""
@@ -1700,11 +1730,11 @@ msgstr ""
msgid "Firewall WAN port"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1050
#: src/tachyon/tabs/diagnostic/initController.ts:1055
msgid "Fix All"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1034
#: src/tachyon/tabs/diagnostic/initController.ts:1039
msgid "Fix applied"
msgstr ""
@@ -1713,8 +1743,8 @@ msgstr ""
msgid "Fix the highlighted fields and save again."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:737
#: src/tachyon/tabs/diagnostic/initController.ts:1030
#: src/tachyon/tabs/diagnostic/initController.ts:742
#: src/tachyon/tabs/diagnostic/initController.ts:1035
msgid "Fixed"
msgstr ""
@@ -1758,7 +1788,7 @@ msgstr ""
msgid "Generate a random 16-character hexadecimal HWID"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:151
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:163
msgid "Generate bug report"
msgstr ""
@@ -1809,11 +1839,11 @@ msgstr ""
msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>."
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107
msgid "Get global check"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:691
#: src/tachyon/tabs/diagnostic/initController.ts:696
msgid "Global check"
msgstr ""
@@ -1936,6 +1966,10 @@ msgstr ""
msgid "HTTP"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:67
msgid "HTTP (ms)"
msgstr ""
#: src/tachyon/api.ts:27
msgid "HTTP error"
msgstr ""
@@ -2393,6 +2427,10 @@ msgstr ""
msgid "Invalid VMess URL: parsing failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:64
msgid "IP / DNS"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203
msgid "IP Addresses (IP CIDR)"
msgstr ""
@@ -2413,12 +2451,12 @@ msgstr ""
msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:733
#: src/tachyon/tabs/diagnostic/initController.ts:738
msgid "Issues"
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
msgid "Issues detected"
msgstr ""
@@ -2816,7 +2854,7 @@ msgstr ""
msgid "No Custom Rules Matched"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1092
#: src/tachyon/tabs/diagnostic/initController.ts:1097
msgid "No diagnostic history available yet."
msgstr ""
@@ -2824,6 +2862,10 @@ msgstr ""
msgid "No domains detected yet"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:57
msgid "No domains found to check."
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187
msgid "No enabled server inbounds configured"
msgstr ""
@@ -2832,7 +2874,7 @@ msgstr ""
msgid "No file selected"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:740
#: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "No issues found"
msgstr ""
@@ -2844,7 +2886,7 @@ msgstr ""
msgid "No public firewall port required"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1082
#: src/tachyon/tabs/diagnostic/initController.ts:1087
msgid "No quick fix required"
msgstr ""
@@ -2918,11 +2960,11 @@ msgstr ""
msgid "Not responding"
msgstr ""
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:137
#: src/tachyon/tabs/diagnostic/initController.ts:122
#: src/tachyon/tabs/diagnostic/initController.ts:352
#: src/tachyon/tabs/diagnostic/initController.ts:410
#: src/tachyon/tabs/diagnostic/initController.ts:496
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:140
#: src/tachyon/tabs/diagnostic/initController.ts:123
#: src/tachyon/tabs/diagnostic/initController.ts:353
#: src/tachyon/tabs/diagnostic/initController.ts:411
#: src/tachyon/tabs/diagnostic/initController.ts:497
msgid "Not running"
msgstr ""
@@ -3069,6 +3111,10 @@ msgstr ""
msgid "Or paste hosts file content:"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:63
msgid "Outbound"
msgstr ""
#: src/validators/validateOutboundJson.ts:111
msgid "outbounds must be a non-empty array of strings"
msgstr ""
@@ -3374,7 +3420,7 @@ msgstr ""
msgid "Rebuilt release"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1002
#: src/tachyon/tabs/diagnostic/initController.ts:1007
msgid "Recommended Smart Quick Fixes:"
msgstr ""
@@ -3463,7 +3509,7 @@ msgstr ""
msgid "Response Packet Magic Header (S4)"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:56
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:58
msgid "Restart Tachyon"
msgstr ""
@@ -3561,7 +3607,7 @@ msgstr ""
msgid "Rules proxy exist"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:124
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:126
msgid "Run AI Doctor"
msgstr ""
@@ -3569,11 +3615,11 @@ msgstr ""
msgid "Run Diagnostic"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116
msgid "Run doctor repair"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1169
#: src/tachyon/tabs/diagnostic/initController.ts:1174
msgid "Run History"
msgstr ""
@@ -3634,6 +3680,10 @@ msgstr ""
msgid "Section"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:62
msgid "Section / Domain"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198
msgid "Section action"
msgstr ""
@@ -3868,10 +3918,14 @@ msgstr ""
#: src/tachyon/methods/shell/index.ts:401
#: src/tachyon/methods/shell/index.ts:422
#: src/tachyon/tabs/diagnostic/initController.ts:603
#: src/tachyon/tabs/diagnostic/initController.ts:604
msgid "Service action failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:24
msgid "Service Health Check"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325
msgid "Service list"
msgstr ""
@@ -3922,8 +3976,8 @@ msgstr ""
msgid "Show servers whose names match the expression."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1282
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142
#: src/tachyon/tabs/diagnostic/initController.ts:1287
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154
msgid "Show sing-box config"
msgstr ""
@@ -3995,7 +4049,7 @@ msgstr ""
msgid "Snell Version"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1067
#: src/tachyon/tabs/diagnostic/initController.ts:1072
msgid "Some fixes failed"
msgstr ""
@@ -4091,7 +4145,7 @@ msgstr ""
msgid "Start bot"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78
msgid "Start Tachyon"
msgstr ""
@@ -4121,7 +4175,7 @@ msgstr ""
msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m."
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:66
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:68
msgid "Stop Tachyon"
msgstr ""
@@ -4300,6 +4354,10 @@ msgstr ""
msgid "Tailscale hostname"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:65
msgid "TCP (ms)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:473
msgid "Telegram Bot"
msgstr ""
@@ -4424,6 +4482,10 @@ msgstr ""
msgid "tiny"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:66
msgid "TLS (ms)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9531
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550
msgid "TLS / HTTPS"
@@ -4648,10 +4710,10 @@ msgid "Unknown country"
msgstr ""
#: src/tachyon/api.ts:40
#: src/tachyon/tabs/diagnostic/initController.ts:715
#: src/tachyon/tabs/diagnostic/initController.ts:752
#: src/tachyon/tabs/diagnostic/initController.ts:873
#: src/tachyon/tabs/diagnostic/initController.ts:1211
#: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:757
#: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1216
msgid "Unknown error"
msgstr ""
@@ -4896,12 +4958,16 @@ msgstr ""
msgid "Value must not contain control characters"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:68
msgid "Verdict"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977
msgid "Via country.is"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1247
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133
#: src/tachyon/tabs/diagnostic/initController.ts:1252
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145
msgid "View logs"
msgstr ""
+50 -2
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 22:28+0300\n"
"PO-Revision-Date: 2026-08-11 22:28+0300\n"
"POT-Creation-Date: 2026-08-12 10:20+0300\n"
"PO-Revision-Date: 2026-08-12 10:20+0300\n"
"Last-Translator: Dushnilin\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -242,6 +242,9 @@ msgstr "Конфиг AmneziaWG успешно загружен!"
msgid "AmneziaWG Generator"
msgstr "Генератор AmneziaWG"
msgid "An error occurred while checking services."
msgstr ""
msgid "Analyzing system log (logread & errors)"
msgstr ""
@@ -434,9 +437,15 @@ msgstr "Пин сертификата недоступен. Примените
msgid "Check Connection"
msgstr "Проверить подключение"
msgid "Check Custom Domain"
msgstr ""
msgid "Check interval"
msgstr "Интервал проверки"
msgid "Check Services"
msgstr ""
msgid "Check timeout after which the server is considered dead"
msgstr "Таймаут проверки, после которого сервер считается недоступным"
@@ -635,6 +644,9 @@ msgstr "Кастомные заголовки устройства"
msgid "Custom DNS Records (Hosts)"
msgstr "Пользовательские записи DNS (Hosts)"
msgid "Custom domain (e.g. google.com)"
msgstr ""
msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr ""
@@ -1100,6 +1112,9 @@ msgstr "Не удалось скопировать!"
msgid "Failed to execute"
msgstr "Не удалось выполнить"
msgid "Failed to execute service check."
msgstr ""
msgid "Failed to generate bug report"
msgstr "Не удалось создать отчёт об ошибке"
@@ -1109,6 +1124,9 @@ msgstr "Не удалось создать конфиг WARP:"
msgid "Failed to parse file:"
msgstr "Не удалось разобрать файл:"
msgid "Failed to parse service check results."
msgstr ""
msgid "Failed to parse WARP config:"
msgstr "Не удалось разобрать конфиг WARP:"
@@ -1163,6 +1181,9 @@ msgstr "Интервал поиска более быстрого сервера
msgid "Fastest"
msgstr "Самый быстрый"
msgid "Fetching service status, please wait..."
msgstr ""
msgid "Filter the servers that will be displayed on the dashboard."
msgstr "Фильтровать серверы, отображаемые на дашборде."
@@ -1343,6 +1364,9 @@ msgstr "Как часто проверять, восстановился ли DN
msgid "HTTP"
msgstr "HTTP"
msgid "HTTP (ms)"
msgstr ""
msgid "HTTP error"
msgstr "Ошибка HTTP"
@@ -1667,6 +1691,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
msgid "Invalid VMess URL: parsing failed"
msgstr "Некорректный VMess URL: ошибка разбора"
msgid "IP / DNS"
msgstr ""
msgid "IP Addresses (IP CIDR)"
msgstr "IP-адреса и подсети (IP CIDR)"
@@ -1973,6 +2000,9 @@ msgstr ""
msgid "No domains detected yet"
msgstr "Домены пока не обнаружены"
msgid "No domains found to check."
msgstr ""
msgid "No enabled server inbounds configured"
msgstr "Включённые серверные inbounds не настроены"
@@ -2138,6 +2168,9 @@ msgstr "Опциональные значения должны быть указ
msgid "Or paste hosts file content:"
msgstr "Или вставьте содержимое hosts-файла:"
msgid "Outbound"
msgstr ""
msgid "outbounds must be a non-empty array of strings"
msgstr "outbounds должен быть непустым массивом строк"
@@ -2534,6 +2567,9 @@ msgstr "Секретный токен для POST/PUT запросов"
msgid "Section"
msgstr "Секция"
msgid "Section / Domain"
msgstr ""
msgid "Section action"
msgstr "Действие секции"
@@ -2699,6 +2735,9 @@ msgstr "Серверы на дашборде"
msgid "Service action failed"
msgstr "Действие сервиса не выполнено"
msgid "Service Health Check"
msgstr ""
msgid "Service list"
msgstr "Список сервисов"
@@ -3008,6 +3047,9 @@ msgstr "Tailscale endpoint"
msgid "Tailscale hostname"
msgstr "Hostname Tailscale"
msgid "TCP (ms)"
msgstr ""
msgid "Telegram Bot"
msgstr "Telegram-бот"
@@ -3092,6 +3134,9 @@ msgstr "Допуск расхождения времени"
msgid "tiny"
msgstr "tiny"
msgid "TLS (ms)"
msgstr ""
msgid "TLS / HTTPS"
msgstr "TLS / HTTPS"
@@ -3392,6 +3437,9 @@ msgstr "Значение не может быть пустым"
msgid "Value must not contain control characters"
msgstr "Значение не должно содержать управляющие символы"
msgid "Verdict"
msgstr ""
msgid "Via country.is"
msgstr "Через country.is"
+2 -2
View File
@@ -1,6 +1,6 @@
{
{
"name": "fe-app-tachyon",
"version": "1.2.69",
"version": "1.2.75",
"license": "MIT",
"type": "module",
"scripts": {
@@ -189,6 +189,7 @@ export interface StoreType {
viewLogs: { loading: boolean };
showSingBoxConfig: { loading: boolean };
generateBugReport: { loading: boolean };
checkServices: { loading: boolean };
};
diagnosticsSystemInfo: {
loading: boolean;
@@ -132,6 +132,9 @@ export const initialDiagnosticStore: Pick<
generateBugReport: {
loading: false,
},
checkServices: {
loading: false,
},
},
diagnosticsRunAction: { loading: false },
diagnosticsChecks: getDiagnosticsChecks(_('Not running')),
@@ -36,6 +36,7 @@ import {
renderCheckSection,
renderRunAction,
renderSystemInfo,
renderServiceCheckModal,
} from './partials';
import { TachyonShellMethods } from '../../methods';
import { fetchServicesInfo } from '../../fetchers/fetchServicesInfo';
@@ -623,6 +624,10 @@ async function handleServiceRuntimeAction({
}
}
function handleCheckServicesAction() {
renderServiceCheckModal();
}
async function handleRestart() {
await handleServiceRuntimeAction({
action: 'restart',
@@ -1475,6 +1480,12 @@ function renderDiagnosticAvailableActionsWidget() {
onClick: handleRunAiDoctor,
disabled: diagnosticsActions.aiDoctor.loading,
},
checkServices: {
visible: true,
loading: diagnosticsActions.checkServices.loading,
disabled: utilityActionsDisabled,
onClick: handleCheckServicesAction,
},
viewLogs: {
loading: diagnosticsActions.viewLogs.loading,
visible: true,
@@ -1,4 +1,5 @@
export * from './renderAvailableActions';
export * from './renderCheckSection';
export * from './renderRunAction';
export * from './renderServiceCheckModal';
export * from './renderSystemInfo';
@@ -31,6 +31,7 @@ interface IRenderAvailableActionsProps {
viewLogs: ActionProps;
showSingBoxConfig: ActionProps;
generateBugReport: ActionProps;
checkServices: ActionProps;
}
export function renderAvailableActions({
@@ -45,6 +46,7 @@ export function renderAvailableActions({
viewLogs,
showSingBoxConfig,
generateBugReport,
checkServices,
}: IRenderAvailableActionsProps) {
return E('div', { class: 'tachyon_diagnostic-page__right-bar__actions' }, [
E('b', {}, _('Available actions')),
@@ -126,6 +128,16 @@ export function renderAvailableActions({
disabled: aiDoctor.disabled,
}),
]),
...insertIf(checkServices.visible, [
renderButton({
classNames: ['cbi-button-apply'],
onClick: checkServices.onClick,
icon: renderSquareChartGanttIcon24,
text: _('Check Services'),
loading: checkServices.loading,
disabled: checkServices.disabled,
}),
]),
...insertIf(viewLogs.visible, [
renderButton({
onClick: viewLogs.onClick,
@@ -0,0 +1,166 @@
import { callBaseMethod } from '../../../methods/shell/callBaseMethod';
import { renderButton } from '../../../../partials';
interface ServiceCheckResult {
section: string;
route_type: string;
domain: string;
ip: string;
dns_ms: number;
tcp_ms: number;
tls_ms: number;
http_ms: number;
status_class: string;
success: boolean;
}
export function renderServiceCheckModal() {
const container = E('div', { class: 'tachyon-service-check-modal' }, [
E('p', {}, _('Fetching service status, please wait...')),
E('div', { class: 'spinning' }, '...'),
]);
ui.showModal(_('Service Health Check'), E('div', {}, [
container,
E('div', { style: 'margin-top: 15px; text-align: right;' }, [
renderButton({
text: _('Close'),
onClick: () => ui.hideModal()
})
])
]));
callBaseMethod('diagnostics/status.uc' as any, [
'service-health-check',
])
.then((res: any) => {
container.innerHTML = '';
if (!res.success) {
container.appendChild(E('p', {}, _('Failed to execute service check.')));
return;
}
let results: ServiceCheckResult[] = [];
try {
if (typeof res.data === 'string') {
results = JSON.parse(res.data);
}
} catch (e) {
container.appendChild(E('p', {}, _('Failed to parse service check results.')));
return;
}
if (results.length === 0) {
container.appendChild(E('p', {}, _('No domains found to check.')));
}
const table = E('table', { class: 'table cbi-section-table' }, [
E('tr', { class: 'tr cbi-section-table-titles' }, [
E('th', { class: 'th' }, _('Section / Domain')),
E('th', { class: 'th' }, _('Outbound')),
E('th', { class: 'th' }, _('IP / DNS')),
E('th', { class: 'th' }, _('TCP (ms)')),
E('th', { class: 'th' }, _('TLS (ms)')),
E('th', { class: 'th' }, _('HTTP (ms)')),
E('th', { class: 'th' }, _('Verdict')),
]),
]);
results.forEach((item) => {
const badgeColor = item.success
? '#28a745'
: item.status_class.includes('Timeout') || item.status_class.includes('HTTP') || item.status_class.includes('Reset')
? '#dc3545'
: '#ffc107';
const badge = E(
'span',
{
style: `display: inline-block; padding: 2px 6px; border-radius: 4px; color: white; font-weight: bold; font-size: 11px; background: ${badgeColor};`,
},
item.status_class,
);
table.appendChild(
E('tr', { class: 'tr cbi-rowstyle-1' }, [
E('td', { class: 'td' }, [
E('strong', {}, item.section),
E('br'),
E('small', {}, item.domain),
]),
E('td', { class: 'td' }, item.route_type),
E('td', { class: 'td' }, [
item.ip || '?',
E('br'),
E('small', {}, `${item.dns_ms}ms`),
]),
E('td', { class: 'td' }, item.tcp_ms > 0 ? `${item.tcp_ms}` : '-'),
E('td', { class: 'td' }, item.tls_ms > 0 ? `${item.tls_ms}` : '-'),
E('td', { class: 'td' }, item.http_ms > 0 ? `${item.http_ms}` : '-'),
E('td', { class: 'td' }, badge),
]),
);
});
if (results.length > 0) {
container.appendChild(table);
}
const customDomainWrap = E('div', { style: 'margin-top: 15px; display: flex; gap: 10px;' }, [
E('input', { type: 'text', id: 'custom-domain-check-input', placeholder: _('Custom domain (e.g. google.com)') })
]);
let customBtn: HTMLButtonElement;
customBtn = renderButton({
text: _('Check Custom Domain'),
classNames: ['cbi-button-action'],
onClick: () => {
const input = document.getElementById('custom-domain-check-input') as HTMLInputElement;
if (!input || !input.value) return;
const domain = input.value.trim();
if (customBtn) {
customBtn.disabled = true;
customBtn.textContent = '...';
}
callBaseMethod('diagnostics/status.uc' as any, ['service-health-check', 'check-custom', domain]).then((cRes: any) => {
if (customBtn) {
customBtn.disabled = false;
customBtn.textContent = _('Check Custom Domain');
}
if (cRes && cRes.success) {
try {
const cResults = JSON.parse(cRes.data);
if (cResults.length > 0) {
const cItem = cResults[0];
const cBadgeColor = cItem.success ? '#28a745' : '#dc3545';
const cBadge = E('span', { style: `display: inline-block; padding: 2px 6px; border-radius: 4px; color: white; font-weight: bold; font-size: 11px; background: ${cBadgeColor};` }, cItem.status_class);
if (results.length === 0 && !document.body.contains(table)) {
container.insertBefore(table, customDomainWrap);
}
table.appendChild(E('tr', { class: 'tr cbi-rowstyle-2' }, [
E('td', { class: 'td' }, [E('strong', {}, cItem.section), E('br'), E('small', {}, cItem.domain)]),
E('td', { class: 'td' }, cItem.route_type),
E('td', { class: 'td' }, [cItem.ip || '?', E('br'), E('small', {}, `${cItem.dns_ms}ms`)]),
E('td', { class: 'td' }, cItem.tcp_ms > 0 ? `${cItem.tcp_ms}` : '-'),
E('td', { class: 'td' }, cItem.tls_ms > 0 ? `${cItem.tls_ms}` : '-'),
E('td', { class: 'td' }, cItem.http_ms > 0 ? `${cItem.http_ms}` : '-'),
E('td', { class: 'td' }, cBadge),
]));
}
} catch(e) {}
}
});
}
});
customDomainWrap.appendChild(customBtn);
container.appendChild(customDomainWrap);
})
.catch(() => {
container.innerHTML = '';
container.appendChild(E('p', {}, _('An error occurred while checking services.')));
});
}
@@ -5085,6 +5085,9 @@ var initialDiagnosticStore = {
},
generateBugReport: {
loading: false
},
checkServices: {
loading: false
}
},
diagnosticsRunAction: { loading: false },
@@ -9720,7 +9723,8 @@ function renderAvailableActions({
aiDoctor,
viewLogs,
showSingBoxConfig,
generateBugReport
generateBugReport,
checkServices
}) {
return E("div", { class: "tachyon_diagnostic-page__right-bar__actions" }, [
E("b", {}, _("Available actions")),
@@ -9802,6 +9806,16 @@ function renderAvailableActions({
disabled: aiDoctor.disabled
})
]),
...insertIf(checkServices.visible, [
renderButton({
classNames: ["cbi-button-apply"],
onClick: checkServices.onClick,
icon: renderSquareChartGanttIcon24,
text: _("Check Services"),
loading: checkServices.loading,
disabled: checkServices.disabled
})
]),
...insertIf(viewLogs.visible, [
renderButton({
onClick: viewLogs.onClick,
@@ -10009,6 +10023,138 @@ function renderRunAction({
]);
}
// src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts
function renderServiceCheckModal() {
const container = E("div", { class: "tachyon-service-check-modal" }, [
E("p", {}, _("Fetching service status, please wait...")),
E("div", { class: "spinning" }, "...")
]);
ui.showModal(_("Service Health Check"), E("div", {}, [
container,
E("div", { style: "margin-top: 15px; text-align: right;" }, [
renderButton({
text: _("Close"),
onClick: () => ui.hideModal()
})
])
]));
callBaseMethod("diagnostics/status.uc", [
"service-health-check"
]).then((res) => {
container.innerHTML = "";
if (!res.success) {
container.appendChild(E("p", {}, _("Failed to execute service check.")));
return;
}
let results = [];
try {
if (typeof res.data === "string") {
results = JSON.parse(res.data);
}
} catch (e) {
container.appendChild(E("p", {}, _("Failed to parse service check results.")));
return;
}
if (results.length === 0) {
container.appendChild(E("p", {}, _("No domains found to check.")));
}
const table = E("table", { class: "table cbi-section-table" }, [
E("tr", { class: "tr cbi-section-table-titles" }, [
E("th", { class: "th" }, _("Section / Domain")),
E("th", { class: "th" }, _("Outbound")),
E("th", { class: "th" }, _("IP / DNS")),
E("th", { class: "th" }, _("TCP (ms)")),
E("th", { class: "th" }, _("TLS (ms)")),
E("th", { class: "th" }, _("HTTP (ms)")),
E("th", { class: "th" }, _("Verdict"))
])
]);
results.forEach((item) => {
const badgeColor = item.success ? "#28a745" : item.status_class.includes("Timeout") || item.status_class.includes("HTTP") || item.status_class.includes("Reset") ? "#dc3545" : "#ffc107";
const badge = E(
"span",
{
style: `display: inline-block; padding: 2px 6px; border-radius: 4px; color: white; font-weight: bold; font-size: 11px; background: ${badgeColor};`
},
item.status_class
);
table.appendChild(
E("tr", { class: "tr cbi-rowstyle-1" }, [
E("td", { class: "td" }, [
E("strong", {}, item.section),
E("br"),
E("small", {}, item.domain)
]),
E("td", { class: "td" }, item.route_type),
E("td", { class: "td" }, [
item.ip || "?",
E("br"),
E("small", {}, `${item.dns_ms}ms`)
]),
E("td", { class: "td" }, item.tcp_ms > 0 ? `${item.tcp_ms}` : "-"),
E("td", { class: "td" }, item.tls_ms > 0 ? `${item.tls_ms}` : "-"),
E("td", { class: "td" }, item.http_ms > 0 ? `${item.http_ms}` : "-"),
E("td", { class: "td" }, badge)
])
);
});
if (results.length > 0) {
container.appendChild(table);
}
const customDomainWrap = E("div", { style: "margin-top: 15px; display: flex; gap: 10px;" }, [
E("input", { type: "text", id: "custom-domain-check-input", placeholder: _("Custom domain (e.g. google.com)") })
]);
let customBtn;
customBtn = renderButton({
text: _("Check Custom Domain"),
classNames: ["cbi-button-action"],
onClick: () => {
const input = document.getElementById("custom-domain-check-input");
if (!input || !input.value) return;
const domain = input.value.trim();
if (customBtn) {
customBtn.disabled = true;
customBtn.textContent = "...";
}
callBaseMethod("diagnostics/status.uc", ["service-health-check", "check-custom", domain]).then((cRes) => {
if (customBtn) {
customBtn.disabled = false;
customBtn.textContent = _("Check Custom Domain");
}
if (cRes && cRes.success) {
try {
const cResults = JSON.parse(cRes.data);
if (cResults.length > 0) {
const cItem = cResults[0];
const cBadgeColor = cItem.success ? "#28a745" : "#dc3545";
const cBadge = E("span", { style: `display: inline-block; padding: 2px 6px; border-radius: 4px; color: white; font-weight: bold; font-size: 11px; background: ${cBadgeColor};` }, cItem.status_class);
if (results.length === 0 && !document.body.contains(table)) {
container.insertBefore(table, customDomainWrap);
}
table.appendChild(E("tr", { class: "tr cbi-rowstyle-2" }, [
E("td", { class: "td" }, [E("strong", {}, cItem.section), E("br"), E("small", {}, cItem.domain)]),
E("td", { class: "td" }, cItem.route_type),
E("td", { class: "td" }, [cItem.ip || "?", E("br"), E("small", {}, `${cItem.dns_ms}ms`)]),
E("td", { class: "td" }, cItem.tcp_ms > 0 ? `${cItem.tcp_ms}` : "-"),
E("td", { class: "td" }, cItem.tls_ms > 0 ? `${cItem.tls_ms}` : "-"),
E("td", { class: "td" }, cItem.http_ms > 0 ? `${cItem.http_ms}` : "-"),
E("td", { class: "td" }, cBadge)
]));
}
} catch (e) {
}
}
});
}
});
customDomainWrap.appendChild(customBtn);
container.appendChild(customDomainWrap);
}).catch(() => {
container.innerHTML = "";
container.appendChild(E("p", {}, _("An error occurred while checking services.")));
});
}
// src/tachyon/tabs/diagnostic/partials/renderSystemInfo.ts
function renderSystemInfo({ items }) {
return E(
@@ -11015,6 +11161,9 @@ async function handleServiceRuntimeAction({
}
}
}
function handleCheckServicesAction() {
renderServiceCheckModal();
}
async function handleRestart() {
await handleServiceRuntimeAction({
action: "restart",
@@ -11686,6 +11835,12 @@ function renderDiagnosticAvailableActionsWidget() {
onClick: handleRunAiDoctor,
disabled: diagnosticsActions.aiDoctor.loading
},
checkServices: {
visible: true,
loading: diagnosticsActions.checkServices.loading,
disabled: utilityActionsDisabled,
onClick: handleCheckServicesAction
},
viewLogs: {
loading: diagnosticsActions.viewLogs.loading,
visible: true,
+50 -2
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 22:28+0300\n"
"PO-Revision-Date: 2026-08-11 22:28+0300\n"
"POT-Creation-Date: 2026-08-12 10:20+0300\n"
"PO-Revision-Date: 2026-08-12 10:20+0300\n"
"Last-Translator: Dushnilin\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -242,6 +242,9 @@ msgstr "Конфиг AmneziaWG успешно загружен!"
msgid "AmneziaWG Generator"
msgstr "Генератор AmneziaWG"
msgid "An error occurred while checking services."
msgstr ""
msgid "Analyzing system log (logread & errors)"
msgstr ""
@@ -434,9 +437,15 @@ msgstr "Пин сертификата недоступен. Примените
msgid "Check Connection"
msgstr "Проверить подключение"
msgid "Check Custom Domain"
msgstr ""
msgid "Check interval"
msgstr "Интервал проверки"
msgid "Check Services"
msgstr ""
msgid "Check timeout after which the server is considered dead"
msgstr "Таймаут проверки, после которого сервер считается недоступным"
@@ -635,6 +644,9 @@ msgstr "Кастомные заголовки устройства"
msgid "Custom DNS Records (Hosts)"
msgstr "Пользовательские записи DNS (Hosts)"
msgid "Custom domain (e.g. google.com)"
msgstr ""
msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr ""
@@ -1100,6 +1112,9 @@ msgstr "Не удалось скопировать!"
msgid "Failed to execute"
msgstr "Не удалось выполнить"
msgid "Failed to execute service check."
msgstr ""
msgid "Failed to generate bug report"
msgstr "Не удалось создать отчёт об ошибке"
@@ -1109,6 +1124,9 @@ msgstr "Не удалось создать конфиг WARP:"
msgid "Failed to parse file:"
msgstr "Не удалось разобрать файл:"
msgid "Failed to parse service check results."
msgstr ""
msgid "Failed to parse WARP config:"
msgstr "Не удалось разобрать конфиг WARP:"
@@ -1163,6 +1181,9 @@ msgstr "Интервал поиска более быстрого сервера
msgid "Fastest"
msgstr "Самый быстрый"
msgid "Fetching service status, please wait..."
msgstr ""
msgid "Filter the servers that will be displayed on the dashboard."
msgstr "Фильтровать серверы, отображаемые на дашборде."
@@ -1343,6 +1364,9 @@ msgstr "Как часто проверять, восстановился ли DN
msgid "HTTP"
msgstr "HTTP"
msgid "HTTP (ms)"
msgstr ""
msgid "HTTP error"
msgstr "Ошибка HTTP"
@@ -1667,6 +1691,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
msgid "Invalid VMess URL: parsing failed"
msgstr "Некорректный VMess URL: ошибка разбора"
msgid "IP / DNS"
msgstr ""
msgid "IP Addresses (IP CIDR)"
msgstr "IP-адреса и подсети (IP CIDR)"
@@ -1973,6 +2000,9 @@ msgstr ""
msgid "No domains detected yet"
msgstr "Домены пока не обнаружены"
msgid "No domains found to check."
msgstr ""
msgid "No enabled server inbounds configured"
msgstr "Включённые серверные inbounds не настроены"
@@ -2138,6 +2168,9 @@ msgstr "Опциональные значения должны быть указ
msgid "Or paste hosts file content:"
msgstr "Или вставьте содержимое hosts-файла:"
msgid "Outbound"
msgstr ""
msgid "outbounds must be a non-empty array of strings"
msgstr "outbounds должен быть непустым массивом строк"
@@ -2534,6 +2567,9 @@ msgstr "Секретный токен для POST/PUT запросов"
msgid "Section"
msgstr "Секция"
msgid "Section / Domain"
msgstr ""
msgid "Section action"
msgstr "Действие секции"
@@ -2699,6 +2735,9 @@ msgstr "Серверы на дашборде"
msgid "Service action failed"
msgstr "Действие сервиса не выполнено"
msgid "Service Health Check"
msgstr ""
msgid "Service list"
msgstr "Список сервисов"
@@ -3008,6 +3047,9 @@ msgstr "Tailscale endpoint"
msgid "Tailscale hostname"
msgstr "Hostname Tailscale"
msgid "TCP (ms)"
msgstr ""
msgid "Telegram Bot"
msgstr "Telegram-бот"
@@ -3092,6 +3134,9 @@ msgstr "Допуск расхождения времени"
msgid "tiny"
msgstr "tiny"
msgid "TLS (ms)"
msgstr ""
msgid "TLS / HTTPS"
msgstr "TLS / HTTPS"
@@ -3392,6 +3437,9 @@ msgstr "Значение не может быть пустым"
msgid "Value must not contain control characters"
msgstr "Значение не должно содержать управляющие символы"
msgid "Verdict"
msgstr ""
msgid "Via country.is"
msgstr "Через country.is"
+133 -67
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 19:28+0300\n"
"PO-Revision-Date: 2026-08-11 19:28+0300\n"
"POT-Creation-Date: 2026-08-12 07:20+0300\n"
"PO-Revision-Date: 2026-08-12 07:20+0300\n"
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -232,18 +232,18 @@ msgstr ""
msgid "AI Doctor (ChatGPT / DeepSeek API)"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:850
#: src/tachyon/tabs/diagnostic/initController.ts:1206
#: src/tachyon/tabs/diagnostic/initController.ts:855
#: src/tachyon/tabs/diagnostic/initController.ts:1211
msgid "AI Doctor Diagnosis"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:822
#: src/tachyon/tabs/diagnostic/initController.ts:827
msgid "AI Doctor Diagnostic Scan in Progress..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:873
#: src/tachyon/tabs/diagnostic/initController.ts:1212
#: src/tachyon/tabs/diagnostic/initController.ts:1221
#: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1217
#: src/tachyon/tabs/diagnostic/initController.ts:1226
msgid "AI Doctor failed"
msgstr ""
@@ -279,7 +279,7 @@ msgstr ""
msgid "All except selected"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1063
#: src/tachyon/tabs/diagnostic/initController.ts:1068
msgid "All fixes applied successfully"
msgstr ""
@@ -344,7 +344,11 @@ msgstr ""
msgid "AmneziaWG Generator"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:804
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:165
msgid "An error occurred while checking services."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:809
msgid "Analyzing system log (logread & errors)"
msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Apply section rules only to the specified local IP addresses"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1052
#: src/tachyon/tabs/diagnostic/initController.ts:1057
msgid "Applying all fixes..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1019
#: src/tachyon/tabs/diagnostic/initController.ts:1024
msgid "Applying fix"
msgstr ""
@@ -446,7 +450,7 @@ msgstr ""
msgid "Automatically update remote hosts lists on schedule"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:50
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:52
msgid "Available actions"
msgstr ""
@@ -494,7 +498,7 @@ msgstr ""
msgid "Browser is using FakeIP correctly"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1346
#: src/tachyon/tabs/diagnostic/initController.ts:1351
msgid "Bug report downloaded"
msgstr ""
@@ -617,12 +621,21 @@ msgstr ""
msgid "Check Connection"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:115
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:131
msgid "Check Custom Domain"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2636
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099
#: src/tachyon/tabs/dashboard/initController.ts:1230
msgid "Check interval"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:136
msgid "Check Services"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112
msgid "Check timeout after which the server is considered dead"
msgstr ""
@@ -641,23 +654,23 @@ msgstr ""
msgid "Checking Connection..."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:803
#: src/tachyon/tabs/diagnostic/initController.ts:808
msgid "Checking nftables filtering tables"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:802
#: src/tachyon/tabs/diagnostic/initController.ts:807
msgid "Checking sing-box service & DNSmasq"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:801
#: src/tachyon/tabs/diagnostic/initController.ts:806
msgid "Checking WAN interfaces & network routing"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:805
#: src/tachyon/tabs/diagnostic/initController.ts:810
msgid "Checking Zapret & ByeDPI rules"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1628
#: src/tachyon/tabs/diagnostic/initController.ts:1639
#: src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:14
#: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15
@@ -686,14 +699,14 @@ msgstr ""
msgid "checks"
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:26
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:10
msgid "Checks failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
msgid "Checks passed"
msgstr ""
@@ -758,9 +771,10 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717
#: src/partials/modal/renderModal.ts:263
#: src/tachyon/tabs/dashboard/initController.ts:1085
#: src/tachyon/tabs/diagnostic/initController.ts:1194
#: src/tachyon/tabs/diagnostic/initController.ts:1199
#: src/tachyon/tabs/monitoring/initController.ts:884
#: src/tachyon/tabs/monitoring/initController.ts:934
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:28
msgid "Close"
msgstr ""
@@ -876,7 +890,7 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693
#: src/partials/modal/renderModal.ts:258
#: src/tachyon/tabs/diagnostic/initController.ts:1189
#: src/tachyon/tabs/diagnostic/initController.ts:1194
msgid "Copy"
msgstr ""
@@ -894,7 +908,7 @@ msgstr ""
msgid "Country code (e.g. ru, us, de)"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1157
#: src/tachyon/tabs/diagnostic/initController.ts:1162
msgid "Current Diagnosis"
msgstr ""
@@ -923,6 +937,10 @@ msgstr ""
msgid "Custom DNS Records (Hosts)"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:113
msgid "Custom domain (e.g. google.com)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1271
msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr ""
@@ -1021,7 +1039,7 @@ msgstr ""
msgid "Direct connection"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88
msgid "Disable autostart"
msgstr ""
@@ -1184,14 +1202,14 @@ msgstr ""
msgid "Do not test specified servers."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:715
#: src/tachyon/tabs/diagnostic/initController.ts:753
#: src/tachyon/tabs/diagnostic/initController.ts:761
#: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:758
#: src/tachyon/tabs/diagnostic/initController.ts:766
msgid "Doctor failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:731
#: src/tachyon/tabs/diagnostic/initController.ts:740
#: src/tachyon/tabs/diagnostic/initController.ts:736
#: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "Doctor repair"
msgstr ""
@@ -1345,7 +1363,7 @@ msgstr ""
msgid "Enable automatic updates for remote lists and rule sets"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:96
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:98
msgid "Enable autostart"
msgstr ""
@@ -1568,7 +1586,7 @@ msgstr ""
msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1039
#: src/tachyon/tabs/diagnostic/initController.ts:1044
msgid "Failed to apply fix"
msgstr ""
@@ -1596,7 +1614,11 @@ msgstr ""
msgid "Failed to execute"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1349
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:44
msgid "Failed to execute service check."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1354
msgid "Failed to generate bug report"
msgstr ""
@@ -1609,6 +1631,10 @@ msgstr ""
msgid "Failed to parse file:"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:52
msgid "Failed to parse service check results."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148
msgid "Failed to parse WARP config:"
msgstr ""
@@ -1688,6 +1714,10 @@ msgstr ""
msgid "Fastest"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:19
msgid "Fetching service status, please wait..."
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312
msgid "Filter the servers that will be displayed on the dashboard."
msgstr ""
@@ -1700,11 +1730,11 @@ msgstr ""
msgid "Firewall WAN port"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1050
#: src/tachyon/tabs/diagnostic/initController.ts:1055
msgid "Fix All"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1034
#: src/tachyon/tabs/diagnostic/initController.ts:1039
msgid "Fix applied"
msgstr ""
@@ -1713,8 +1743,8 @@ msgstr ""
msgid "Fix the highlighted fields and save again."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:737
#: src/tachyon/tabs/diagnostic/initController.ts:1030
#: src/tachyon/tabs/diagnostic/initController.ts:742
#: src/tachyon/tabs/diagnostic/initController.ts:1035
msgid "Fixed"
msgstr ""
@@ -1758,7 +1788,7 @@ msgstr ""
msgid "Generate a random 16-character hexadecimal HWID"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:151
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:163
msgid "Generate bug report"
msgstr ""
@@ -1809,11 +1839,11 @@ msgstr ""
msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>."
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107
msgid "Get global check"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:691
#: src/tachyon/tabs/diagnostic/initController.ts:696
msgid "Global check"
msgstr ""
@@ -1936,6 +1966,10 @@ msgstr ""
msgid "HTTP"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:67
msgid "HTTP (ms)"
msgstr ""
#: src/tachyon/api.ts:27
msgid "HTTP error"
msgstr ""
@@ -2393,6 +2427,10 @@ msgstr ""
msgid "Invalid VMess URL: parsing failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:64
msgid "IP / DNS"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203
msgid "IP Addresses (IP CIDR)"
msgstr ""
@@ -2413,12 +2451,12 @@ msgstr ""
msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:733
#: src/tachyon/tabs/diagnostic/initController.ts:738
msgid "Issues"
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:20
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:17
msgid "Issues detected"
msgstr ""
@@ -2816,7 +2854,7 @@ msgstr ""
msgid "No Custom Rules Matched"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1092
#: src/tachyon/tabs/diagnostic/initController.ts:1097
msgid "No diagnostic history available yet."
msgstr ""
@@ -2824,6 +2862,10 @@ msgstr ""
msgid "No domains detected yet"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:57
msgid "No domains found to check."
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187
msgid "No enabled server inbounds configured"
msgstr ""
@@ -2832,7 +2874,7 @@ msgstr ""
msgid "No file selected"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:740
#: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "No issues found"
msgstr ""
@@ -2844,7 +2886,7 @@ msgstr ""
msgid "No public firewall port required"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1082
#: src/tachyon/tabs/diagnostic/initController.ts:1087
msgid "No quick fix required"
msgstr ""
@@ -2918,11 +2960,11 @@ msgstr ""
msgid "Not responding"
msgstr ""
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:137
#: src/tachyon/tabs/diagnostic/initController.ts:122
#: src/tachyon/tabs/diagnostic/initController.ts:352
#: src/tachyon/tabs/diagnostic/initController.ts:410
#: src/tachyon/tabs/diagnostic/initController.ts:496
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:140
#: src/tachyon/tabs/diagnostic/initController.ts:123
#: src/tachyon/tabs/diagnostic/initController.ts:353
#: src/tachyon/tabs/diagnostic/initController.ts:411
#: src/tachyon/tabs/diagnostic/initController.ts:497
msgid "Not running"
msgstr ""
@@ -3069,6 +3111,10 @@ msgstr ""
msgid "Or paste hosts file content:"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:63
msgid "Outbound"
msgstr ""
#: src/validators/validateOutboundJson.ts:111
msgid "outbounds must be a non-empty array of strings"
msgstr ""
@@ -3374,7 +3420,7 @@ msgstr ""
msgid "Rebuilt release"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1002
#: src/tachyon/tabs/diagnostic/initController.ts:1007
msgid "Recommended Smart Quick Fixes:"
msgstr ""
@@ -3463,7 +3509,7 @@ msgstr ""
msgid "Response Packet Magic Header (S4)"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:56
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:58
msgid "Restart Tachyon"
msgstr ""
@@ -3561,7 +3607,7 @@ msgstr ""
msgid "Rules proxy exist"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:124
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:126
msgid "Run AI Doctor"
msgstr ""
@@ -3569,11 +3615,11 @@ msgstr ""
msgid "Run Diagnostic"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116
msgid "Run doctor repair"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1169
#: src/tachyon/tabs/diagnostic/initController.ts:1174
msgid "Run History"
msgstr ""
@@ -3634,6 +3680,10 @@ msgstr ""
msgid "Section"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:62
msgid "Section / Domain"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198
msgid "Section action"
msgstr ""
@@ -3868,10 +3918,14 @@ msgstr ""
#: src/tachyon/methods/shell/index.ts:401
#: src/tachyon/methods/shell/index.ts:422
#: src/tachyon/tabs/diagnostic/initController.ts:603
#: src/tachyon/tabs/diagnostic/initController.ts:604
msgid "Service action failed"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:24
msgid "Service Health Check"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325
msgid "Service list"
msgstr ""
@@ -3922,8 +3976,8 @@ msgstr ""
msgid "Show servers whose names match the expression."
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1282
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142
#: src/tachyon/tabs/diagnostic/initController.ts:1287
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154
msgid "Show sing-box config"
msgstr ""
@@ -3995,7 +4049,7 @@ msgstr ""
msgid "Snell Version"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1067
#: src/tachyon/tabs/diagnostic/initController.ts:1072
msgid "Some fixes failed"
msgstr ""
@@ -4091,7 +4145,7 @@ msgstr ""
msgid "Start bot"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78
msgid "Start Tachyon"
msgstr ""
@@ -4121,7 +4175,7 @@ msgstr ""
msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m."
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:66
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:68
msgid "Stop Tachyon"
msgstr ""
@@ -4300,6 +4354,10 @@ msgstr ""
msgid "Tailscale hostname"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:65
msgid "TCP (ms)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:473
msgid "Telegram Bot"
msgstr ""
@@ -4424,6 +4482,10 @@ msgstr ""
msgid "tiny"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:66
msgid "TLS (ms)"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9531
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550
msgid "TLS / HTTPS"
@@ -4648,10 +4710,10 @@ msgid "Unknown country"
msgstr ""
#: src/tachyon/api.ts:40
#: src/tachyon/tabs/diagnostic/initController.ts:715
#: src/tachyon/tabs/diagnostic/initController.ts:752
#: src/tachyon/tabs/diagnostic/initController.ts:873
#: src/tachyon/tabs/diagnostic/initController.ts:1211
#: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:757
#: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1216
msgid "Unknown error"
msgstr ""
@@ -4896,12 +4958,16 @@ msgstr ""
msgid "Value must not contain control characters"
msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:68
msgid "Verdict"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977
msgid "Via country.is"
msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1247
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133
#: src/tachyon/tabs/diagnostic/initController.ts:1252
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145
msgid "View logs"
msgstr ""
@@ -0,0 +1,156 @@
#!/usr/bin/env ucode
let fs = require("fs");
let uci = require("uci");
let TARGET_DOMAINS = {
youtube: "www.youtube.com",
discord: "discord.com",
telegram: "web.telegram.org",
instagram: "www.instagram.com",
twitter: "twitter.com",
facebook: "www.facebook.com",
rutracker: "rutracker.org",
tiktok: "www.tiktok.com",
google_ai: "gemini.google.com",
openai: "chatgpt.com",
github: "github.com",
netflix: "www.netflix.com",
russia_inside: "www.instagram.com"
};
function perform_curl_check(domain) {
let url = "https://" + domain;
let cmd = sprintf("curl -k -s -o /dev/null -w '%%{time_namelookup}|%%{time_connect}|%%{time_appconnect}|%%{time_starttransfer}|%%{time_total}|%%{http_code}|%%{remote_ip}' --connect-timeout 5 --max-time 10 %s", url);
let f = fs.popen(cmd, "r");
if (!f) return null;
let result_str = f.read("all");
let exit_code = f.close();
// exit_code is shifted by 8 in popen close
exit_code = exit_code / 256;
let parts = split(result_str, "|");
if (length(parts) < 7) {
return { success: false, error: "curl_failed", exit_code: exit_code };
}
let time_namelookup = int(1000 * float(parts[0]));
let time_connect = int(1000 * float(parts[1]));
let time_appconnect = int(1000 * float(parts[2]));
let time_starttransfer = int(1000 * float(parts[3]));
let time_total = int(1000 * float(parts[4]));
let http_code = int(parts[5]);
let remote_ip = parts[6];
let tcp_ms = time_connect > 0 ? time_connect - time_namelookup : 0;
let tls_ms = time_appconnect > 0 ? time_appconnect - time_connect : 0;
let http_ms = time_starttransfer > 0 ? time_starttransfer - time_appconnect : 0;
let status_class = "OK";
if (exit_code == 6) status_class = "DNS Error";
else if (exit_code == 7 || exit_code == 28) status_class = "TCP Timeout/Refused";
else if (exit_code == 35 || (exit_code == 0 && time_appconnect == 0 && time_connect > 0)) status_class = "TLS Reset";
else if (exit_code != 0) status_class = "Error (" + exit_code + ")";
else if (http_code == 403 || http_code == 451) status_class = "HTTP " + http_code;
else if (http_code >= 200 && http_code < 400) status_class = "OK";
else status_class = "HTTP " + http_code;
return {
success: exit_code == 0 && (http_code >= 200 && http_code < 400),
status_class: status_class,
dns_ms: time_namelookup,
tcp_ms: tcp_ms,
tls_ms: tls_ms,
http_ms: http_ms,
total_ms: time_total,
http_code: http_code,
remote_ip: remote_ip,
exit_code: exit_code
};
}
function process_sections() {
let cursor = uci.cursor();
cursor.load("tachyon");
let results = [];
cursor.foreach("tachyon", "section", function(s) {
if (s.enabled != "1") return;
let domains_to_check = [];
if (type(s.community_lists) == "array") {
for (let i = 0; i < length(s.community_lists); i++) {
let list_name = s.community_lists[i];
if (TARGET_DOMAINS[list_name]) {
push(domains_to_check, TARGET_DOMAINS[list_name]);
}
}
} else if (type(s.community_lists) == "string") {
if (TARGET_DOMAINS[s.community_lists]) {
push(domains_to_check, TARGET_DOMAINS[s.community_lists]);
}
}
let unique_domains = {};
for (let i = 0; i < length(domains_to_check); i++) {
unique_domains[domains_to_check[i]] = true;
}
for (let domain in keys(unique_domains)) {
let label = s.label || s['.name'];
let route_type = s.action || "direct";
if (s.action == "zapret" && s.zapret_strategy) {
route_type = "zapret (" + s.zapret_strategy + ")";
} else if (s.action == "zapret2" && s.zapret2_strategy) {
route_type = "zapret2 (" + s.zapret2_strategy + ")";
} else if (s.action == "byedpi" && s.byedpi_strategy) {
route_type = "byedpi (" + s.byedpi_strategy + ")";
}
let res = perform_curl_check(domain);
let check_result = {
section: label,
route_type: route_type,
domain: domain,
ip: res ? res.remote_ip : "",
dns_ms: res ? res.dns_ms : 0,
tcp_ms: res ? res.tcp_ms : 0,
tls_ms: res ? res.tls_ms : 0,
http_ms: res ? res.http_ms : 0,
status_class: res ? res.status_class : "Error",
success: res ? res.success : false
};
push(results, check_result);
}
});
print(sprintf("%J", results), "\n");
}
function process_custom_domain(domain) {
let res = perform_curl_check(domain);
let results = [{
section: "Custom",
route_type: "auto",
domain: domain,
ip: res ? res.remote_ip : "",
dns_ms: res ? res.dns_ms : 0,
tcp_ms: res ? res.tcp_ms : 0,
tls_ms: res ? res.tls_ms : 0,
http_ms: res ? res.http_ms : 0,
status_class: res ? res.status_class : "Error",
success: res ? res.success : false
}];
print(sprintf("%J", results), "\n");
}
if (ARGV[0] == "check-custom" && ARGV[1]) {
process_custom_domain(ARGV[1]);
} else {
process_sections();
}
@@ -2031,6 +2031,8 @@ else if (mode == "clash-proxy-latencies-result")
clash_proxy_latencies_result(ARGV[1], ARGV[2]);
else if (mode == "clash-unknown-action")
clash_unknown_action();
else if (mode == "service-health-check")
system("ucode /usr/lib/tachyon/diagnostics/service_check.uc " + (ARGV[1] || ""));
else {
warn("Usage: diagnostics/status.uc <operation> ...\n");
exit(1);