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", "call": "AI Doctor Diagnosis",
"key": "AI Doctor Diagnosis", "key": "AI Doctor Diagnosis",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:850", "src/tachyon/tabs/diagnostic/initController.ts:855",
"src/tachyon/tabs/diagnostic/initController.ts:1206" "src/tachyon/tabs/diagnostic/initController.ts:1211"
] ]
}, },
{ {
"call": "AI Doctor Diagnostic Scan in Progress...", "call": "AI Doctor Diagnostic Scan in Progress...",
"key": "AI Doctor Diagnostic Scan in Progress...", "key": "AI Doctor Diagnostic Scan in Progress...",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:822" "src/tachyon/tabs/diagnostic/initController.ts:827"
] ]
}, },
{ {
"call": "AI Doctor failed", "call": "AI Doctor failed",
"key": "AI Doctor failed", "key": "AI Doctor failed",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:873", "src/tachyon/tabs/diagnostic/initController.ts:878",
"src/tachyon/tabs/diagnostic/initController.ts:1212", "src/tachyon/tabs/diagnostic/initController.ts:1217",
"src/tachyon/tabs/diagnostic/initController.ts:1221" "src/tachyon/tabs/diagnostic/initController.ts:1226"
] ]
}, },
{ {
@@ -443,7 +443,7 @@
"call": "All fixes applied successfully", "call": "All fixes applied successfully",
"key": "All fixes applied successfully", "key": "All fixes applied successfully",
"places": [ "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" "../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)", "call": "Analyzing system log (logread & errors)",
"key": "Analyzing system log (logread & errors)", "key": "Analyzing system log (logread & errors)",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:804" "src/tachyon/tabs/diagnostic/initController.ts:809"
] ]
}, },
{ {
@@ -584,14 +591,14 @@
"call": "Applying all fixes...", "call": "Applying all fixes...",
"key": "Applying all fixes...", "key": "Applying all fixes...",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1052" "src/tachyon/tabs/diagnostic/initController.ts:1057"
] ]
}, },
{ {
"call": "Applying fix", "call": "Applying fix",
"key": "Applying fix", "key": "Applying fix",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1019" "src/tachyon/tabs/diagnostic/initController.ts:1024"
] ]
}, },
{ {
@@ -733,7 +740,7 @@
"call": "Available actions", "call": "Available actions",
"key": "Available actions", "key": "Available actions",
"places": [ "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", "call": "Bug report downloaded",
"key": "Bug report downloaded", "key": "Bug report downloaded",
"places": [ "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" "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", "call": "Check interval",
"key": "Check interval", "key": "Check interval",
@@ -1026,6 +1041,13 @@
"src/tachyon/tabs/dashboard/initController.ts:1230" "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", "call": "Check timeout after which the server is considered dead",
"key": "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", "call": "Checking nftables filtering tables",
"key": "Checking nftables filtering tables", "key": "Checking nftables filtering tables",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:803" "src/tachyon/tabs/diagnostic/initController.ts:808"
] ]
}, },
{ {
"call": "Checking sing-box service & DNSmasq", "call": "Checking sing-box service & DNSmasq",
"key": "Checking sing-box service & DNSmasq", "key": "Checking sing-box service & DNSmasq",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:802" "src/tachyon/tabs/diagnostic/initController.ts:807"
] ]
}, },
{ {
"call": "Checking WAN interfaces & network routing", "call": "Checking WAN interfaces & network routing",
"key": "Checking WAN interfaces & network routing", "key": "Checking WAN interfaces & network routing",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:801" "src/tachyon/tabs/diagnostic/initController.ts:806"
] ]
}, },
{ {
"call": "Checking Zapret & ByeDPI rules", "call": "Checking Zapret & ByeDPI rules",
"key": "Checking Zapret & ByeDPI rules", "key": "Checking Zapret & ByeDPI rules",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:805" "src/tachyon/tabs/diagnostic/initController.ts:810"
] ]
}, },
{ {
"call": "Checking, please wait", "call": "Checking, please wait",
"key": "Checking, please wait", "key": "Checking, please wait",
"places": [ "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/runByedpiCheck.ts:14",
"src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15", "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15",
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15", "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15",
@@ -1129,17 +1151,17 @@
"call": "Checks failed", "call": "Checks failed",
"key": "Checks failed", "key": "Checks failed",
"places": [ "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", "call": "Checks passed",
"key": "Checks passed", "key": "Checks passed",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13",
"src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23", "src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23",
"src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43", "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43"
"src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13"
] ]
}, },
{ {
@@ -1249,9 +1271,10 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717",
"src/partials/modal/renderModal.ts:263", "src/partials/modal/renderModal.ts:263",
"src/tachyon/tabs/dashboard/initController.ts:1085", "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: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": [ "places": [
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693",
"src/partials/modal/renderModal.ts:258", "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", "call": "Current Diagnosis",
"key": "Current Diagnosis", "key": "Current Diagnosis",
"places": [ "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" "../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)", "call": "Custom OpenAI-Compatible API (OpenRouter)",
"key": "Custom OpenAI-Compatible API (OpenRouter)", "key": "Custom OpenAI-Compatible API (OpenRouter)",
@@ -1698,7 +1728,7 @@
"call": "Disable autostart", "call": "Disable autostart",
"key": "Disable autostart", "key": "Disable autostart",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88"
] ]
}, },
{ {
@@ -1975,17 +2005,17 @@
"call": "Doctor failed", "call": "Doctor failed",
"key": "Doctor failed", "key": "Doctor failed",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:715", "src/tachyon/tabs/diagnostic/initController.ts:720",
"src/tachyon/tabs/diagnostic/initController.ts:753", "src/tachyon/tabs/diagnostic/initController.ts:758",
"src/tachyon/tabs/diagnostic/initController.ts:761" "src/tachyon/tabs/diagnostic/initController.ts:766"
] ]
}, },
{ {
"call": "Doctor repair", "call": "Doctor repair",
"key": "Doctor repair", "key": "Doctor repair",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:731", "src/tachyon/tabs/diagnostic/initController.ts:736",
"src/tachyon/tabs/diagnostic/initController.ts:740" "src/tachyon/tabs/diagnostic/initController.ts:745"
] ]
}, },
{ {
@@ -2250,7 +2280,7 @@
"call": "Enable autostart", "call": "Enable autostart",
"key": "Enable autostart", "key": "Enable autostart",
"places": [ "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", "call": "Failed to apply fix",
"key": "Failed to apply fix", "key": "Failed to apply fix",
"places": [ "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" "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", "call": "Failed to generate bug report",
"key": "Failed to generate bug report", "key": "Failed to generate bug report",
"places": [ "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" "../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:", "call": "Failed to parse WARP config:",
"key": "Failed to parse WARP config:", "key": "Failed to parse WARP config:",
@@ -2817,6 +2861,13 @@
"src/tachyon/methods/custom/getDashboardSections.ts:654" "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.", "call": "Filter the servers that will be displayed on the dashboard.",
"key": "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", "call": "Fix All",
"key": "Fix All", "key": "Fix All",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1050" "src/tachyon/tabs/diagnostic/initController.ts:1055"
] ]
}, },
{ {
"call": "Fix applied", "call": "Fix applied",
"key": "Fix applied", "key": "Fix applied",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1034" "src/tachyon/tabs/diagnostic/initController.ts:1039"
] ]
}, },
{ {
@@ -2864,8 +2915,8 @@
"call": "Fixed", "call": "Fixed",
"key": "Fixed", "key": "Fixed",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:737", "src/tachyon/tabs/diagnostic/initController.ts:742",
"src/tachyon/tabs/diagnostic/initController.ts:1030" "src/tachyon/tabs/diagnostic/initController.ts:1035"
] ]
}, },
{ {
@@ -2942,7 +2993,7 @@
"call": "Generate bug report", "call": "Generate bug report",
"key": "Generate bug report", "key": "Generate bug report",
"places": [ "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", "call": "Get global check",
"key": "Get global check", "key": "Get global check",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107"
] ]
}, },
{ {
"call": "Global check", "call": "Global check",
"key": "Global check", "key": "Global check",
"places": [ "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" "../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", "call": "HTTP error",
"key": "HTTP error", "key": "HTTP error",
@@ -4026,6 +4084,13 @@
"src/validators/validateVmessUrl.ts:68" "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)", "call": "IP Addresses (IP CIDR)",
"key": "IP Addresses (IP CIDR)", "key": "IP Addresses (IP CIDR)",
@@ -4065,15 +4130,15 @@
"call": "Issues", "call": "Issues",
"key": "Issues", "key": "Issues",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:733" "src/tachyon/tabs/diagnostic/initController.ts:738"
] ]
}, },
{ {
"call": "Issues detected", "call": "Issues detected",
"key": "Issues detected", "key": "Issues detected",
"places": [ "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.", "call": "No diagnostic history available yet.",
"key": "No diagnostic history available yet.", "key": "No diagnostic history available yet.",
"places": [ "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" "../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", "call": "No enabled server inbounds configured",
"key": "No enabled server inbounds configured", "key": "No enabled server inbounds configured",
@@ -4781,7 +4853,7 @@
"call": "No issues found", "call": "No issues found",
"key": "No issues found", "key": "No issues found",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:740" "src/tachyon/tabs/diagnostic/initController.ts:745"
] ]
}, },
{ {
@@ -4802,7 +4874,7 @@
"call": "No quick fix required", "call": "No quick fix required",
"key": "No quick fix required", "key": "No quick fix required",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1082" "src/tachyon/tabs/diagnostic/initController.ts:1087"
] ]
}, },
{ {
@@ -4921,11 +4993,11 @@
"call": "Not running", "call": "Not running",
"key": "Not running", "key": "Not running",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/diagnostic.store.ts:137", "src/tachyon/tabs/diagnostic/diagnostic.store.ts:140",
"src/tachyon/tabs/diagnostic/initController.ts:122", "src/tachyon/tabs/diagnostic/initController.ts:123",
"src/tachyon/tabs/diagnostic/initController.ts:352", "src/tachyon/tabs/diagnostic/initController.ts:353",
"src/tachyon/tabs/diagnostic/initController.ts:410", "src/tachyon/tabs/diagnostic/initController.ts:411",
"src/tachyon/tabs/diagnostic/initController.ts:496" "src/tachyon/tabs/diagnostic/initController.ts:497"
] ]
}, },
{ {
@@ -5173,6 +5245,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7696" "../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", "call": "outbounds must be a non-empty array of strings",
"key": "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:", "call": "Recommended Smart Quick Fixes:",
"key": "Recommended Smart Quick Fixes:", "key": "Recommended Smart Quick Fixes:",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1002" "src/tachyon/tabs/diagnostic/initController.ts:1007"
] ]
}, },
{ {
@@ -5850,7 +5929,7 @@
"call": "Restart Tachyon", "call": "Restart Tachyon",
"key": "Restart Tachyon", "key": "Restart Tachyon",
"places": [ "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", "call": "Run AI Doctor",
"key": "Run AI Doctor", "key": "Run AI Doctor",
"places": [ "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", "call": "Run doctor repair",
"key": "Run doctor repair", "key": "Run doctor repair",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116"
] ]
}, },
{ {
"call": "Run History", "call": "Run History",
"key": "Run History", "key": "Run History",
"places": [ "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" "../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", "call": "Section action",
"key": "Section action", "key": "Section action",
@@ -6534,7 +6620,14 @@
"places": [ "places": [
"src/tachyon/methods/shell/index.ts:401", "src/tachyon/methods/shell/index.ts:401",
"src/tachyon/methods/shell/index.ts:422", "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", "call": "Show sing-box config",
"key": "Show sing-box config", "key": "Show sing-box config",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1282", "src/tachyon/tabs/diagnostic/initController.ts:1287",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154"
] ]
}, },
{ {
@@ -6754,7 +6847,7 @@
"call": "Some fixes failed", "call": "Some fixes failed",
"key": "Some fixes failed", "key": "Some fixes failed",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1067" "src/tachyon/tabs/diagnostic/initController.ts:1072"
] ]
}, },
{ {
@@ -6919,7 +7012,7 @@
"call": "Start Tachyon", "call": "Start Tachyon",
"key": "Start Tachyon", "key": "Start Tachyon",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78"
] ]
}, },
{ {
@@ -6970,7 +7063,7 @@
"call": "Stop Tachyon", "call": "Stop Tachyon",
"key": "Stop Tachyon", "key": "Stop Tachyon",
"places": [ "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" "../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", "call": "Telegram Bot",
"key": "Telegram Bot", "key": "Telegram Bot",
@@ -7482,6 +7582,13 @@
"src/tachyon/helpers/singBoxVariant.ts:64" "src/tachyon/helpers/singBoxVariant.ts:64"
] ]
}, },
{
"call": "TLS (ms)",
"key": "TLS (ms)",
"places": [
"src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:66"
]
},
{ {
"call": "TLS / HTTPS", "call": "TLS / HTTPS",
"key": "TLS / HTTPS", "key": "TLS / HTTPS",
@@ -7857,10 +7964,10 @@
"key": "Unknown error", "key": "Unknown error",
"places": [ "places": [
"src/tachyon/api.ts:40", "src/tachyon/api.ts:40",
"src/tachyon/tabs/diagnostic/initController.ts:715", "src/tachyon/tabs/diagnostic/initController.ts:720",
"src/tachyon/tabs/diagnostic/initController.ts:752", "src/tachyon/tabs/diagnostic/initController.ts:757",
"src/tachyon/tabs/diagnostic/initController.ts:873", "src/tachyon/tabs/diagnostic/initController.ts:878",
"src/tachyon/tabs/diagnostic/initController.ts:1211" "src/tachyon/tabs/diagnostic/initController.ts:1216"
] ]
}, },
{ {
@@ -8254,6 +8361,13 @@
"../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1837" "../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", "call": "Via country.is",
"key": "Via country.is", "key": "Via country.is",
@@ -8265,8 +8379,8 @@
"call": "View logs", "call": "View logs",
"key": "View logs", "key": "View logs",
"places": [ "places": [
"src/tachyon/tabs/diagnostic/initController.ts:1247", "src/tachyon/tabs/diagnostic/initController.ts:1252",
"src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133" "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145"
] ]
}, },
{ {
+133 -67
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TACHYON\n" "Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 19:28+0300\n" "POT-Creation-Date: 2026-08-12 07:20+0300\n"
"PO-Revision-Date: 2026-08-11 19:28+0300\n" "PO-Revision-Date: 2026-08-12 07:20+0300\n"
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n" "Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n" "Language: \n"
@@ -232,18 +232,18 @@ msgstr ""
msgid "AI Doctor (ChatGPT / DeepSeek API)" msgid "AI Doctor (ChatGPT / DeepSeek API)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:850 #: src/tachyon/tabs/diagnostic/initController.ts:855
#: src/tachyon/tabs/diagnostic/initController.ts:1206 #: src/tachyon/tabs/diagnostic/initController.ts:1211
msgid "AI Doctor Diagnosis" msgid "AI Doctor Diagnosis"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:822 #: src/tachyon/tabs/diagnostic/initController.ts:827
msgid "AI Doctor Diagnostic Scan in Progress..." msgid "AI Doctor Diagnostic Scan in Progress..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:873 #: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1212 #: src/tachyon/tabs/diagnostic/initController.ts:1217
#: src/tachyon/tabs/diagnostic/initController.ts:1221 #: src/tachyon/tabs/diagnostic/initController.ts:1226
msgid "AI Doctor failed" msgid "AI Doctor failed"
msgstr "" msgstr ""
@@ -279,7 +279,7 @@ msgstr ""
msgid "All except selected" msgid "All except selected"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1063 #: src/tachyon/tabs/diagnostic/initController.ts:1068
msgid "All fixes applied successfully" msgid "All fixes applied successfully"
msgstr "" msgstr ""
@@ -344,7 +344,11 @@ msgstr ""
msgid "AmneziaWG Generator" msgid "AmneziaWG Generator"
msgstr "" 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)" msgid "Analyzing system log (logread & errors)"
msgstr "" msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Apply section rules only to the specified local IP addresses" msgid "Apply section rules only to the specified local IP addresses"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1052 #: src/tachyon/tabs/diagnostic/initController.ts:1057
msgid "Applying all fixes..." msgid "Applying all fixes..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1019 #: src/tachyon/tabs/diagnostic/initController.ts:1024
msgid "Applying fix" msgid "Applying fix"
msgstr "" msgstr ""
@@ -446,7 +450,7 @@ msgstr ""
msgid "Automatically update remote hosts lists on schedule" msgid "Automatically update remote hosts lists on schedule"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:50 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:52
msgid "Available actions" msgid "Available actions"
msgstr "" msgstr ""
@@ -494,7 +498,7 @@ msgstr ""
msgid "Browser is using FakeIP correctly" msgid "Browser is using FakeIP correctly"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1346 #: src/tachyon/tabs/diagnostic/initController.ts:1351
msgid "Bug report downloaded" msgid "Bug report downloaded"
msgstr "" msgstr ""
@@ -617,12 +621,21 @@ msgstr ""
msgid "Check Connection" msgid "Check Connection"
msgstr "" 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:2636
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099
#: src/tachyon/tabs/dashboard/initController.ts:1230 #: src/tachyon/tabs/dashboard/initController.ts:1230
msgid "Check interval" msgid "Check interval"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112
msgid "Check timeout after which the server is considered dead" msgid "Check timeout after which the server is considered dead"
msgstr "" msgstr ""
@@ -641,23 +654,23 @@ msgstr ""
msgid "Checking Connection..." msgid "Checking Connection..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:803 #: src/tachyon/tabs/diagnostic/initController.ts:808
msgid "Checking nftables filtering tables" msgid "Checking nftables filtering tables"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:802 #: src/tachyon/tabs/diagnostic/initController.ts:807
msgid "Checking sing-box service & DNSmasq" msgid "Checking sing-box service & DNSmasq"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:801 #: src/tachyon/tabs/diagnostic/initController.ts:806
msgid "Checking WAN interfaces & network routing" msgid "Checking WAN interfaces & network routing"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:805 #: src/tachyon/tabs/diagnostic/initController.ts:810
msgid "Checking Zapret & ByeDPI rules" msgid "Checking Zapret & ByeDPI rules"
msgstr "" 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/runByedpiCheck.ts:14
#: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15 #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15
@@ -686,14 +699,14 @@ msgstr ""
msgid "checks" msgid "checks"
msgstr "" msgstr ""
#: 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
msgid "Checks failed" msgid "Checks failed"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23 #: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
msgid "Checks passed" msgid "Checks passed"
msgstr "" msgstr ""
@@ -758,9 +771,10 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717
#: src/partials/modal/renderModal.ts:263 #: src/partials/modal/renderModal.ts:263
#: src/tachyon/tabs/dashboard/initController.ts:1085 #: 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:884
#: src/tachyon/tabs/monitoring/initController.ts:934 #: src/tachyon/tabs/monitoring/initController.ts:934
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:28
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@@ -876,7 +890,7 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693
#: src/partials/modal/renderModal.ts:258 #: src/partials/modal/renderModal.ts:258
#: src/tachyon/tabs/diagnostic/initController.ts:1189 #: src/tachyon/tabs/diagnostic/initController.ts:1194
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
@@ -894,7 +908,7 @@ msgstr ""
msgid "Country code (e.g. ru, us, de)" msgid "Country code (e.g. ru, us, de)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1157 #: src/tachyon/tabs/diagnostic/initController.ts:1162
msgid "Current Diagnosis" msgid "Current Diagnosis"
msgstr "" msgstr ""
@@ -923,6 +937,10 @@ msgstr ""
msgid "Custom DNS Records (Hosts)" msgid "Custom DNS Records (Hosts)"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1271
msgid "Custom OpenAI-Compatible API (OpenRouter)" msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr "" msgstr ""
@@ -1021,7 +1039,7 @@ msgstr ""
msgid "Direct connection" msgid "Direct connection"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88
msgid "Disable autostart" msgid "Disable autostart"
msgstr "" msgstr ""
@@ -1184,14 +1202,14 @@ msgstr ""
msgid "Do not test specified servers." msgid "Do not test specified servers."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:715 #: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:753 #: src/tachyon/tabs/diagnostic/initController.ts:758
#: src/tachyon/tabs/diagnostic/initController.ts:761 #: src/tachyon/tabs/diagnostic/initController.ts:766
msgid "Doctor failed" msgid "Doctor failed"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:731 #: src/tachyon/tabs/diagnostic/initController.ts:736
#: src/tachyon/tabs/diagnostic/initController.ts:740 #: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "Doctor repair" msgid "Doctor repair"
msgstr "" msgstr ""
@@ -1345,7 +1363,7 @@ msgstr ""
msgid "Enable automatic updates for remote lists and rule sets" msgid "Enable automatic updates for remote lists and rule sets"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:96 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:98
msgid "Enable autostart" msgid "Enable autostart"
msgstr "" msgstr ""
@@ -1568,7 +1586,7 @@ msgstr ""
msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1039 #: src/tachyon/tabs/diagnostic/initController.ts:1044
msgid "Failed to apply fix" msgid "Failed to apply fix"
msgstr "" msgstr ""
@@ -1596,7 +1614,11 @@ msgstr ""
msgid "Failed to execute" msgid "Failed to execute"
msgstr "" 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" msgid "Failed to generate bug report"
msgstr "" msgstr ""
@@ -1609,6 +1631,10 @@ msgstr ""
msgid "Failed to parse file:" msgid "Failed to parse file:"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148
msgid "Failed to parse WARP config:" msgid "Failed to parse WARP config:"
msgstr "" msgstr ""
@@ -1688,6 +1714,10 @@ msgstr ""
msgid "Fastest" msgid "Fastest"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312
msgid "Filter the servers that will be displayed on the dashboard." msgid "Filter the servers that will be displayed on the dashboard."
msgstr "" msgstr ""
@@ -1700,11 +1730,11 @@ msgstr ""
msgid "Firewall WAN port" msgid "Firewall WAN port"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1050 #: src/tachyon/tabs/diagnostic/initController.ts:1055
msgid "Fix All" msgid "Fix All"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1034 #: src/tachyon/tabs/diagnostic/initController.ts:1039
msgid "Fix applied" msgid "Fix applied"
msgstr "" msgstr ""
@@ -1713,8 +1743,8 @@ msgstr ""
msgid "Fix the highlighted fields and save again." msgid "Fix the highlighted fields and save again."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:737 #: src/tachyon/tabs/diagnostic/initController.ts:742
#: src/tachyon/tabs/diagnostic/initController.ts:1030 #: src/tachyon/tabs/diagnostic/initController.ts:1035
msgid "Fixed" msgid "Fixed"
msgstr "" msgstr ""
@@ -1758,7 +1788,7 @@ msgstr ""
msgid "Generate a random 16-character hexadecimal HWID" msgid "Generate a random 16-character hexadecimal HWID"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:151 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:163
msgid "Generate bug report" msgid "Generate bug report"
msgstr "" msgstr ""
@@ -1809,11 +1839,11 @@ msgstr ""
msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>." msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107
msgid "Get global check" msgid "Get global check"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:691 #: src/tachyon/tabs/diagnostic/initController.ts:696
msgid "Global check" msgid "Global check"
msgstr "" msgstr ""
@@ -1936,6 +1966,10 @@ msgstr ""
msgid "HTTP" msgid "HTTP"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:67
msgid "HTTP (ms)"
msgstr ""
#: src/tachyon/api.ts:27 #: src/tachyon/api.ts:27
msgid "HTTP error" msgid "HTTP error"
msgstr "" msgstr ""
@@ -2393,6 +2427,10 @@ msgstr ""
msgid "Invalid VMess URL: parsing failed" msgid "Invalid VMess URL: parsing failed"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203
msgid "IP Addresses (IP CIDR)" msgid "IP Addresses (IP CIDR)"
msgstr "" msgstr ""
@@ -2413,12 +2451,12 @@ msgstr ""
msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:733 #: src/tachyon/tabs/diagnostic/initController.ts:738
msgid "Issues" msgid "Issues"
msgstr "" msgstr ""
#: 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
msgid "Issues detected" msgid "Issues detected"
msgstr "" msgstr ""
@@ -2816,7 +2854,7 @@ msgstr ""
msgid "No Custom Rules Matched" msgid "No Custom Rules Matched"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1092 #: src/tachyon/tabs/diagnostic/initController.ts:1097
msgid "No diagnostic history available yet." msgid "No diagnostic history available yet."
msgstr "" msgstr ""
@@ -2824,6 +2862,10 @@ msgstr ""
msgid "No domains detected yet" msgid "No domains detected yet"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:57
msgid "No domains found to check."
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187 #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187
msgid "No enabled server inbounds configured" msgid "No enabled server inbounds configured"
msgstr "" msgstr ""
@@ -2832,7 +2874,7 @@ msgstr ""
msgid "No file selected" msgid "No file selected"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:740 #: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "No issues found" msgid "No issues found"
msgstr "" msgstr ""
@@ -2844,7 +2886,7 @@ msgstr ""
msgid "No public firewall port required" msgid "No public firewall port required"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1082 #: src/tachyon/tabs/diagnostic/initController.ts:1087
msgid "No quick fix required" msgid "No quick fix required"
msgstr "" msgstr ""
@@ -2918,11 +2960,11 @@ msgstr ""
msgid "Not responding" msgid "Not responding"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:137 #: src/tachyon/tabs/diagnostic/diagnostic.store.ts:140
#: src/tachyon/tabs/diagnostic/initController.ts:122 #: src/tachyon/tabs/diagnostic/initController.ts:123
#: src/tachyon/tabs/diagnostic/initController.ts:352 #: src/tachyon/tabs/diagnostic/initController.ts:353
#: src/tachyon/tabs/diagnostic/initController.ts:410 #: src/tachyon/tabs/diagnostic/initController.ts:411
#: src/tachyon/tabs/diagnostic/initController.ts:496 #: src/tachyon/tabs/diagnostic/initController.ts:497
msgid "Not running" msgid "Not running"
msgstr "" msgstr ""
@@ -3069,6 +3111,10 @@ msgstr ""
msgid "Or paste hosts file content:" msgid "Or paste hosts file content:"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:63
msgid "Outbound"
msgstr ""
#: src/validators/validateOutboundJson.ts:111 #: src/validators/validateOutboundJson.ts:111
msgid "outbounds must be a non-empty array of strings" msgid "outbounds must be a non-empty array of strings"
msgstr "" msgstr ""
@@ -3374,7 +3420,7 @@ msgstr ""
msgid "Rebuilt release" msgid "Rebuilt release"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1002 #: src/tachyon/tabs/diagnostic/initController.ts:1007
msgid "Recommended Smart Quick Fixes:" msgid "Recommended Smart Quick Fixes:"
msgstr "" msgstr ""
@@ -3463,7 +3509,7 @@ msgstr ""
msgid "Response Packet Magic Header (S4)" msgid "Response Packet Magic Header (S4)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:56 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:58
msgid "Restart Tachyon" msgid "Restart Tachyon"
msgstr "" msgstr ""
@@ -3561,7 +3607,7 @@ msgstr ""
msgid "Rules proxy exist" msgid "Rules proxy exist"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:124 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:126
msgid "Run AI Doctor" msgid "Run AI Doctor"
msgstr "" msgstr ""
@@ -3569,11 +3615,11 @@ msgstr ""
msgid "Run Diagnostic" msgid "Run Diagnostic"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116
msgid "Run doctor repair" msgid "Run doctor repair"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1169 #: src/tachyon/tabs/diagnostic/initController.ts:1174
msgid "Run History" msgid "Run History"
msgstr "" msgstr ""
@@ -3634,6 +3680,10 @@ msgstr ""
msgid "Section" msgid "Section"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198
msgid "Section action" msgid "Section action"
msgstr "" msgstr ""
@@ -3868,10 +3918,14 @@ msgstr ""
#: src/tachyon/methods/shell/index.ts:401 #: src/tachyon/methods/shell/index.ts:401
#: src/tachyon/methods/shell/index.ts:422 #: 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" msgid "Service action failed"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325
msgid "Service list" msgid "Service list"
msgstr "" msgstr ""
@@ -3922,8 +3976,8 @@ msgstr ""
msgid "Show servers whose names match the expression." msgid "Show servers whose names match the expression."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1282 #: src/tachyon/tabs/diagnostic/initController.ts:1287
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154
msgid "Show sing-box config" msgid "Show sing-box config"
msgstr "" msgstr ""
@@ -3995,7 +4049,7 @@ msgstr ""
msgid "Snell Version" msgid "Snell Version"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1067 #: src/tachyon/tabs/diagnostic/initController.ts:1072
msgid "Some fixes failed" msgid "Some fixes failed"
msgstr "" msgstr ""
@@ -4091,7 +4145,7 @@ msgstr ""
msgid "Start bot" msgid "Start bot"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78
msgid "Start Tachyon" msgid "Start Tachyon"
msgstr "" 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." msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:66 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:68
msgid "Stop Tachyon" msgid "Stop Tachyon"
msgstr "" msgstr ""
@@ -4300,6 +4354,10 @@ msgstr ""
msgid "Tailscale hostname" msgid "Tailscale hostname"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:473
msgid "Telegram Bot" msgid "Telegram Bot"
msgstr "" msgstr ""
@@ -4424,6 +4482,10 @@ msgstr ""
msgid "tiny" msgid "tiny"
msgstr "" 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:9531
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550
msgid "TLS / HTTPS" msgid "TLS / HTTPS"
@@ -4648,10 +4710,10 @@ msgid "Unknown country"
msgstr "" msgstr ""
#: src/tachyon/api.ts:40 #: src/tachyon/api.ts:40
#: src/tachyon/tabs/diagnostic/initController.ts:715 #: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:752 #: src/tachyon/tabs/diagnostic/initController.ts:757
#: src/tachyon/tabs/diagnostic/initController.ts:873 #: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1211 #: src/tachyon/tabs/diagnostic/initController.ts:1216
msgid "Unknown error" msgid "Unknown error"
msgstr "" msgstr ""
@@ -4896,12 +4958,16 @@ msgstr ""
msgid "Value must not contain control characters" msgid "Value must not contain control characters"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:68
msgid "Verdict"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977
msgid "Via country.is" msgid "Via country.is"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1247 #: src/tachyon/tabs/diagnostic/initController.ts:1252
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145
msgid "View logs" msgid "View logs"
msgstr "" msgstr ""
+50 -2
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TACHYON\n" "Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 22:28+0300\n" "POT-Creation-Date: 2026-08-12 10:20+0300\n"
"PO-Revision-Date: 2026-08-11 22:28+0300\n" "PO-Revision-Date: 2026-08-12 10:20+0300\n"
"Last-Translator: Dushnilin\n" "Last-Translator: Dushnilin\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: ru\n" "Language: ru\n"
@@ -242,6 +242,9 @@ msgstr "Конфиг AmneziaWG успешно загружен!"
msgid "AmneziaWG Generator" msgid "AmneziaWG Generator"
msgstr "Генератор AmneziaWG" msgstr "Генератор AmneziaWG"
msgid "An error occurred while checking services."
msgstr ""
msgid "Analyzing system log (logread & errors)" msgid "Analyzing system log (logread & errors)"
msgstr "" msgstr ""
@@ -434,9 +437,15 @@ msgstr "Пин сертификата недоступен. Примените
msgid "Check Connection" msgid "Check Connection"
msgstr "Проверить подключение" msgstr "Проверить подключение"
msgid "Check Custom Domain"
msgstr ""
msgid "Check interval" msgid "Check interval"
msgstr "Интервал проверки" msgstr "Интервал проверки"
msgid "Check Services"
msgstr ""
msgid "Check timeout after which the server is considered dead" msgid "Check timeout after which the server is considered dead"
msgstr "Таймаут проверки, после которого сервер считается недоступным" msgstr "Таймаут проверки, после которого сервер считается недоступным"
@@ -635,6 +644,9 @@ msgstr "Кастомные заголовки устройства"
msgid "Custom DNS Records (Hosts)" msgid "Custom DNS Records (Hosts)"
msgstr "Пользовательские записи DNS (Hosts)" msgstr "Пользовательские записи DNS (Hosts)"
msgid "Custom domain (e.g. google.com)"
msgstr ""
msgid "Custom OpenAI-Compatible API (OpenRouter)" msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr "" msgstr ""
@@ -1100,6 +1112,9 @@ msgstr "Не удалось скопировать!"
msgid "Failed to execute" msgid "Failed to execute"
msgstr "Не удалось выполнить" msgstr "Не удалось выполнить"
msgid "Failed to execute service check."
msgstr ""
msgid "Failed to generate bug report" msgid "Failed to generate bug report"
msgstr "Не удалось создать отчёт об ошибке" msgstr "Не удалось создать отчёт об ошибке"
@@ -1109,6 +1124,9 @@ msgstr "Не удалось создать конфиг WARP:"
msgid "Failed to parse file:" msgid "Failed to parse file:"
msgstr "Не удалось разобрать файл:" msgstr "Не удалось разобрать файл:"
msgid "Failed to parse service check results."
msgstr ""
msgid "Failed to parse WARP config:" msgid "Failed to parse WARP config:"
msgstr "Не удалось разобрать конфиг WARP:" msgstr "Не удалось разобрать конфиг WARP:"
@@ -1163,6 +1181,9 @@ msgstr "Интервал поиска более быстрого сервера
msgid "Fastest" msgid "Fastest"
msgstr "Самый быстрый" msgstr "Самый быстрый"
msgid "Fetching service status, please wait..."
msgstr ""
msgid "Filter the servers that will be displayed on the dashboard." msgid "Filter the servers that will be displayed on the dashboard."
msgstr "Фильтровать серверы, отображаемые на дашборде." msgstr "Фильтровать серверы, отображаемые на дашборде."
@@ -1343,6 +1364,9 @@ msgstr "Как часто проверять, восстановился ли DN
msgid "HTTP" msgid "HTTP"
msgstr "HTTP" msgstr "HTTP"
msgid "HTTP (ms)"
msgstr ""
msgid "HTTP error" msgid "HTTP error"
msgstr "Ошибка HTTP" msgstr "Ошибка HTTP"
@@ -1667,6 +1691,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
msgid "Invalid VMess URL: parsing failed" msgid "Invalid VMess URL: parsing failed"
msgstr "Некорректный VMess URL: ошибка разбора" msgstr "Некорректный VMess URL: ошибка разбора"
msgid "IP / DNS"
msgstr ""
msgid "IP Addresses (IP CIDR)" msgid "IP Addresses (IP CIDR)"
msgstr "IP-адреса и подсети (IP CIDR)" msgstr "IP-адреса и подсети (IP CIDR)"
@@ -1973,6 +2000,9 @@ msgstr ""
msgid "No domains detected yet" msgid "No domains detected yet"
msgstr "Домены пока не обнаружены" msgstr "Домены пока не обнаружены"
msgid "No domains found to check."
msgstr ""
msgid "No enabled server inbounds configured" msgid "No enabled server inbounds configured"
msgstr "Включённые серверные inbounds не настроены" msgstr "Включённые серверные inbounds не настроены"
@@ -2138,6 +2168,9 @@ msgstr "Опциональные значения должны быть указ
msgid "Or paste hosts file content:" msgid "Or paste hosts file content:"
msgstr "Или вставьте содержимое hosts-файла:" msgstr "Или вставьте содержимое hosts-файла:"
msgid "Outbound"
msgstr ""
msgid "outbounds must be a non-empty array of strings" msgid "outbounds must be a non-empty array of strings"
msgstr "outbounds должен быть непустым массивом строк" msgstr "outbounds должен быть непустым массивом строк"
@@ -2534,6 +2567,9 @@ msgstr "Секретный токен для POST/PUT запросов"
msgid "Section" msgid "Section"
msgstr "Секция" msgstr "Секция"
msgid "Section / Domain"
msgstr ""
msgid "Section action" msgid "Section action"
msgstr "Действие секции" msgstr "Действие секции"
@@ -2699,6 +2735,9 @@ msgstr "Серверы на дашборде"
msgid "Service action failed" msgid "Service action failed"
msgstr "Действие сервиса не выполнено" msgstr "Действие сервиса не выполнено"
msgid "Service Health Check"
msgstr ""
msgid "Service list" msgid "Service list"
msgstr "Список сервисов" msgstr "Список сервисов"
@@ -3008,6 +3047,9 @@ msgstr "Tailscale endpoint"
msgid "Tailscale hostname" msgid "Tailscale hostname"
msgstr "Hostname Tailscale" msgstr "Hostname Tailscale"
msgid "TCP (ms)"
msgstr ""
msgid "Telegram Bot" msgid "Telegram Bot"
msgstr "Telegram-бот" msgstr "Telegram-бот"
@@ -3092,6 +3134,9 @@ msgstr "Допуск расхождения времени"
msgid "tiny" msgid "tiny"
msgstr "tiny" msgstr "tiny"
msgid "TLS (ms)"
msgstr ""
msgid "TLS / HTTPS" msgid "TLS / HTTPS"
msgstr "TLS / HTTPS" msgstr "TLS / HTTPS"
@@ -3392,6 +3437,9 @@ msgstr "Значение не может быть пустым"
msgid "Value must not contain control characters" msgid "Value must not contain control characters"
msgstr "Значение не должно содержать управляющие символы" msgstr "Значение не должно содержать управляющие символы"
msgid "Verdict"
msgstr ""
msgid "Via country.is" msgid "Via country.is"
msgstr "Через country.is" msgstr "Через country.is"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "fe-app-tachyon", "name": "fe-app-tachyon",
"version": "1.2.69", "version": "1.2.75",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
@@ -189,6 +189,7 @@ export interface StoreType {
viewLogs: { loading: boolean }; viewLogs: { loading: boolean };
showSingBoxConfig: { loading: boolean }; showSingBoxConfig: { loading: boolean };
generateBugReport: { loading: boolean }; generateBugReport: { loading: boolean };
checkServices: { loading: boolean };
}; };
diagnosticsSystemInfo: { diagnosticsSystemInfo: {
loading: boolean; loading: boolean;
@@ -132,6 +132,9 @@ export const initialDiagnosticStore: Pick<
generateBugReport: { generateBugReport: {
loading: false, loading: false,
}, },
checkServices: {
loading: false,
},
}, },
diagnosticsRunAction: { loading: false }, diagnosticsRunAction: { loading: false },
diagnosticsChecks: getDiagnosticsChecks(_('Not running')), diagnosticsChecks: getDiagnosticsChecks(_('Not running')),
@@ -36,6 +36,7 @@ import {
renderCheckSection, renderCheckSection,
renderRunAction, renderRunAction,
renderSystemInfo, renderSystemInfo,
renderServiceCheckModal,
} from './partials'; } from './partials';
import { TachyonShellMethods } from '../../methods'; import { TachyonShellMethods } from '../../methods';
import { fetchServicesInfo } from '../../fetchers/fetchServicesInfo'; import { fetchServicesInfo } from '../../fetchers/fetchServicesInfo';
@@ -623,6 +624,10 @@ async function handleServiceRuntimeAction({
} }
} }
function handleCheckServicesAction() {
renderServiceCheckModal();
}
async function handleRestart() { async function handleRestart() {
await handleServiceRuntimeAction({ await handleServiceRuntimeAction({
action: 'restart', action: 'restart',
@@ -1475,6 +1480,12 @@ function renderDiagnosticAvailableActionsWidget() {
onClick: handleRunAiDoctor, onClick: handleRunAiDoctor,
disabled: diagnosticsActions.aiDoctor.loading, disabled: diagnosticsActions.aiDoctor.loading,
}, },
checkServices: {
visible: true,
loading: diagnosticsActions.checkServices.loading,
disabled: utilityActionsDisabled,
onClick: handleCheckServicesAction,
},
viewLogs: { viewLogs: {
loading: diagnosticsActions.viewLogs.loading, loading: diagnosticsActions.viewLogs.loading,
visible: true, visible: true,
@@ -1,4 +1,5 @@
export * from './renderAvailableActions'; export * from './renderAvailableActions';
export * from './renderCheckSection'; export * from './renderCheckSection';
export * from './renderRunAction'; export * from './renderRunAction';
export * from './renderServiceCheckModal';
export * from './renderSystemInfo'; export * from './renderSystemInfo';
@@ -31,6 +31,7 @@ interface IRenderAvailableActionsProps {
viewLogs: ActionProps; viewLogs: ActionProps;
showSingBoxConfig: ActionProps; showSingBoxConfig: ActionProps;
generateBugReport: ActionProps; generateBugReport: ActionProps;
checkServices: ActionProps;
} }
export function renderAvailableActions({ export function renderAvailableActions({
@@ -45,6 +46,7 @@ export function renderAvailableActions({
viewLogs, viewLogs,
showSingBoxConfig, showSingBoxConfig,
generateBugReport, generateBugReport,
checkServices,
}: IRenderAvailableActionsProps) { }: IRenderAvailableActionsProps) {
return E('div', { class: 'tachyon_diagnostic-page__right-bar__actions' }, [ return E('div', { class: 'tachyon_diagnostic-page__right-bar__actions' }, [
E('b', {}, _('Available actions')), E('b', {}, _('Available actions')),
@@ -126,6 +128,16 @@ export function renderAvailableActions({
disabled: aiDoctor.disabled, 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, [ ...insertIf(viewLogs.visible, [
renderButton({ renderButton({
onClick: viewLogs.onClick, 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: { generateBugReport: {
loading: false loading: false
},
checkServices: {
loading: false
} }
}, },
diagnosticsRunAction: { loading: false }, diagnosticsRunAction: { loading: false },
@@ -9720,7 +9723,8 @@ function renderAvailableActions({
aiDoctor, aiDoctor,
viewLogs, viewLogs,
showSingBoxConfig, showSingBoxConfig,
generateBugReport generateBugReport,
checkServices
}) { }) {
return E("div", { class: "tachyon_diagnostic-page__right-bar__actions" }, [ return E("div", { class: "tachyon_diagnostic-page__right-bar__actions" }, [
E("b", {}, _("Available actions")), E("b", {}, _("Available actions")),
@@ -9802,6 +9806,16 @@ function renderAvailableActions({
disabled: aiDoctor.disabled 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, [ ...insertIf(viewLogs.visible, [
renderButton({ renderButton({
onClick: viewLogs.onClick, 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 // src/tachyon/tabs/diagnostic/partials/renderSystemInfo.ts
function renderSystemInfo({ items }) { function renderSystemInfo({ items }) {
return E( return E(
@@ -11015,6 +11161,9 @@ async function handleServiceRuntimeAction({
} }
} }
} }
function handleCheckServicesAction() {
renderServiceCheckModal();
}
async function handleRestart() { async function handleRestart() {
await handleServiceRuntimeAction({ await handleServiceRuntimeAction({
action: "restart", action: "restart",
@@ -11686,6 +11835,12 @@ function renderDiagnosticAvailableActionsWidget() {
onClick: handleRunAiDoctor, onClick: handleRunAiDoctor,
disabled: diagnosticsActions.aiDoctor.loading disabled: diagnosticsActions.aiDoctor.loading
}, },
checkServices: {
visible: true,
loading: diagnosticsActions.checkServices.loading,
disabled: utilityActionsDisabled,
onClick: handleCheckServicesAction
},
viewLogs: { viewLogs: {
loading: diagnosticsActions.viewLogs.loading, loading: diagnosticsActions.viewLogs.loading,
visible: true, visible: true,
+50 -2
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TACHYON\n" "Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 22:28+0300\n" "POT-Creation-Date: 2026-08-12 10:20+0300\n"
"PO-Revision-Date: 2026-08-11 22:28+0300\n" "PO-Revision-Date: 2026-08-12 10:20+0300\n"
"Last-Translator: Dushnilin\n" "Last-Translator: Dushnilin\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: ru\n" "Language: ru\n"
@@ -242,6 +242,9 @@ msgstr "Конфиг AmneziaWG успешно загружен!"
msgid "AmneziaWG Generator" msgid "AmneziaWG Generator"
msgstr "Генератор AmneziaWG" msgstr "Генератор AmneziaWG"
msgid "An error occurred while checking services."
msgstr ""
msgid "Analyzing system log (logread & errors)" msgid "Analyzing system log (logread & errors)"
msgstr "" msgstr ""
@@ -434,9 +437,15 @@ msgstr "Пин сертификата недоступен. Примените
msgid "Check Connection" msgid "Check Connection"
msgstr "Проверить подключение" msgstr "Проверить подключение"
msgid "Check Custom Domain"
msgstr ""
msgid "Check interval" msgid "Check interval"
msgstr "Интервал проверки" msgstr "Интервал проверки"
msgid "Check Services"
msgstr ""
msgid "Check timeout after which the server is considered dead" msgid "Check timeout after which the server is considered dead"
msgstr "Таймаут проверки, после которого сервер считается недоступным" msgstr "Таймаут проверки, после которого сервер считается недоступным"
@@ -635,6 +644,9 @@ msgstr "Кастомные заголовки устройства"
msgid "Custom DNS Records (Hosts)" msgid "Custom DNS Records (Hosts)"
msgstr "Пользовательские записи DNS (Hosts)" msgstr "Пользовательские записи DNS (Hosts)"
msgid "Custom domain (e.g. google.com)"
msgstr ""
msgid "Custom OpenAI-Compatible API (OpenRouter)" msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr "" msgstr ""
@@ -1100,6 +1112,9 @@ msgstr "Не удалось скопировать!"
msgid "Failed to execute" msgid "Failed to execute"
msgstr "Не удалось выполнить" msgstr "Не удалось выполнить"
msgid "Failed to execute service check."
msgstr ""
msgid "Failed to generate bug report" msgid "Failed to generate bug report"
msgstr "Не удалось создать отчёт об ошибке" msgstr "Не удалось создать отчёт об ошибке"
@@ -1109,6 +1124,9 @@ msgstr "Не удалось создать конфиг WARP:"
msgid "Failed to parse file:" msgid "Failed to parse file:"
msgstr "Не удалось разобрать файл:" msgstr "Не удалось разобрать файл:"
msgid "Failed to parse service check results."
msgstr ""
msgid "Failed to parse WARP config:" msgid "Failed to parse WARP config:"
msgstr "Не удалось разобрать конфиг WARP:" msgstr "Не удалось разобрать конфиг WARP:"
@@ -1163,6 +1181,9 @@ msgstr "Интервал поиска более быстрого сервера
msgid "Fastest" msgid "Fastest"
msgstr "Самый быстрый" msgstr "Самый быстрый"
msgid "Fetching service status, please wait..."
msgstr ""
msgid "Filter the servers that will be displayed on the dashboard." msgid "Filter the servers that will be displayed on the dashboard."
msgstr "Фильтровать серверы, отображаемые на дашборде." msgstr "Фильтровать серверы, отображаемые на дашборде."
@@ -1343,6 +1364,9 @@ msgstr "Как часто проверять, восстановился ли DN
msgid "HTTP" msgid "HTTP"
msgstr "HTTP" msgstr "HTTP"
msgid "HTTP (ms)"
msgstr ""
msgid "HTTP error" msgid "HTTP error"
msgstr "Ошибка HTTP" msgstr "Ошибка HTTP"
@@ -1667,6 +1691,9 @@ msgstr "Неверный URL VLESS: ошибка разбора"
msgid "Invalid VMess URL: parsing failed" msgid "Invalid VMess URL: parsing failed"
msgstr "Некорректный VMess URL: ошибка разбора" msgstr "Некорректный VMess URL: ошибка разбора"
msgid "IP / DNS"
msgstr ""
msgid "IP Addresses (IP CIDR)" msgid "IP Addresses (IP CIDR)"
msgstr "IP-адреса и подсети (IP CIDR)" msgstr "IP-адреса и подсети (IP CIDR)"
@@ -1973,6 +2000,9 @@ msgstr ""
msgid "No domains detected yet" msgid "No domains detected yet"
msgstr "Домены пока не обнаружены" msgstr "Домены пока не обнаружены"
msgid "No domains found to check."
msgstr ""
msgid "No enabled server inbounds configured" msgid "No enabled server inbounds configured"
msgstr "Включённые серверные inbounds не настроены" msgstr "Включённые серверные inbounds не настроены"
@@ -2138,6 +2168,9 @@ msgstr "Опциональные значения должны быть указ
msgid "Or paste hosts file content:" msgid "Or paste hosts file content:"
msgstr "Или вставьте содержимое hosts-файла:" msgstr "Или вставьте содержимое hosts-файла:"
msgid "Outbound"
msgstr ""
msgid "outbounds must be a non-empty array of strings" msgid "outbounds must be a non-empty array of strings"
msgstr "outbounds должен быть непустым массивом строк" msgstr "outbounds должен быть непустым массивом строк"
@@ -2534,6 +2567,9 @@ msgstr "Секретный токен для POST/PUT запросов"
msgid "Section" msgid "Section"
msgstr "Секция" msgstr "Секция"
msgid "Section / Domain"
msgstr ""
msgid "Section action" msgid "Section action"
msgstr "Действие секции" msgstr "Действие секции"
@@ -2699,6 +2735,9 @@ msgstr "Серверы на дашборде"
msgid "Service action failed" msgid "Service action failed"
msgstr "Действие сервиса не выполнено" msgstr "Действие сервиса не выполнено"
msgid "Service Health Check"
msgstr ""
msgid "Service list" msgid "Service list"
msgstr "Список сервисов" msgstr "Список сервисов"
@@ -3008,6 +3047,9 @@ msgstr "Tailscale endpoint"
msgid "Tailscale hostname" msgid "Tailscale hostname"
msgstr "Hostname Tailscale" msgstr "Hostname Tailscale"
msgid "TCP (ms)"
msgstr ""
msgid "Telegram Bot" msgid "Telegram Bot"
msgstr "Telegram-бот" msgstr "Telegram-бот"
@@ -3092,6 +3134,9 @@ msgstr "Допуск расхождения времени"
msgid "tiny" msgid "tiny"
msgstr "tiny" msgstr "tiny"
msgid "TLS (ms)"
msgstr ""
msgid "TLS / HTTPS" msgid "TLS / HTTPS"
msgstr "TLS / HTTPS" msgstr "TLS / HTTPS"
@@ -3392,6 +3437,9 @@ msgstr "Значение не может быть пустым"
msgid "Value must not contain control characters" msgid "Value must not contain control characters"
msgstr "Значение не должно содержать управляющие символы" msgstr "Значение не должно содержать управляющие символы"
msgid "Verdict"
msgstr ""
msgid "Via country.is" msgid "Via country.is"
msgstr "Через country.is" msgstr "Через country.is"
+133 -67
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TACHYON\n" "Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-08-11 19:28+0300\n" "POT-Creation-Date: 2026-08-12 07:20+0300\n"
"PO-Revision-Date: 2026-08-11 19:28+0300\n" "PO-Revision-Date: 2026-08-12 07:20+0300\n"
"Last-Translator: Dushnilin <dushnilin@gmail.com>\n" "Last-Translator: Dushnilin <dushnilin@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n" "Language: \n"
@@ -232,18 +232,18 @@ msgstr ""
msgid "AI Doctor (ChatGPT / DeepSeek API)" msgid "AI Doctor (ChatGPT / DeepSeek API)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:850 #: src/tachyon/tabs/diagnostic/initController.ts:855
#: src/tachyon/tabs/diagnostic/initController.ts:1206 #: src/tachyon/tabs/diagnostic/initController.ts:1211
msgid "AI Doctor Diagnosis" msgid "AI Doctor Diagnosis"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:822 #: src/tachyon/tabs/diagnostic/initController.ts:827
msgid "AI Doctor Diagnostic Scan in Progress..." msgid "AI Doctor Diagnostic Scan in Progress..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:873 #: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1212 #: src/tachyon/tabs/diagnostic/initController.ts:1217
#: src/tachyon/tabs/diagnostic/initController.ts:1221 #: src/tachyon/tabs/diagnostic/initController.ts:1226
msgid "AI Doctor failed" msgid "AI Doctor failed"
msgstr "" msgstr ""
@@ -279,7 +279,7 @@ msgstr ""
msgid "All except selected" msgid "All except selected"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1063 #: src/tachyon/tabs/diagnostic/initController.ts:1068
msgid "All fixes applied successfully" msgid "All fixes applied successfully"
msgstr "" msgstr ""
@@ -344,7 +344,11 @@ msgstr ""
msgid "AmneziaWG Generator" msgid "AmneziaWG Generator"
msgstr "" 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)" msgid "Analyzing system log (logread & errors)"
msgstr "" msgstr ""
@@ -360,11 +364,11 @@ msgstr ""
msgid "Apply section rules only to the specified local IP addresses" msgid "Apply section rules only to the specified local IP addresses"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1052 #: src/tachyon/tabs/diagnostic/initController.ts:1057
msgid "Applying all fixes..." msgid "Applying all fixes..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1019 #: src/tachyon/tabs/diagnostic/initController.ts:1024
msgid "Applying fix" msgid "Applying fix"
msgstr "" msgstr ""
@@ -446,7 +450,7 @@ msgstr ""
msgid "Automatically update remote hosts lists on schedule" msgid "Automatically update remote hosts lists on schedule"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:50 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:52
msgid "Available actions" msgid "Available actions"
msgstr "" msgstr ""
@@ -494,7 +498,7 @@ msgstr ""
msgid "Browser is using FakeIP correctly" msgid "Browser is using FakeIP correctly"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1346 #: src/tachyon/tabs/diagnostic/initController.ts:1351
msgid "Bug report downloaded" msgid "Bug report downloaded"
msgstr "" msgstr ""
@@ -617,12 +621,21 @@ msgstr ""
msgid "Check Connection" msgid "Check Connection"
msgstr "" 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:2636
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3099
#: src/tachyon/tabs/dashboard/initController.ts:1230 #: src/tachyon/tabs/dashboard/initController.ts:1230
msgid "Check interval" msgid "Check interval"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3112
msgid "Check timeout after which the server is considered dead" msgid "Check timeout after which the server is considered dead"
msgstr "" msgstr ""
@@ -641,23 +654,23 @@ msgstr ""
msgid "Checking Connection..." msgid "Checking Connection..."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:803 #: src/tachyon/tabs/diagnostic/initController.ts:808
msgid "Checking nftables filtering tables" msgid "Checking nftables filtering tables"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:802 #: src/tachyon/tabs/diagnostic/initController.ts:807
msgid "Checking sing-box service & DNSmasq" msgid "Checking sing-box service & DNSmasq"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:801 #: src/tachyon/tabs/diagnostic/initController.ts:806
msgid "Checking WAN interfaces & network routing" msgid "Checking WAN interfaces & network routing"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:805 #: src/tachyon/tabs/diagnostic/initController.ts:810
msgid "Checking Zapret & ByeDPI rules" msgid "Checking Zapret & ByeDPI rules"
msgstr "" 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/runByedpiCheck.ts:14
#: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15 #: src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:15
@@ -686,14 +699,14 @@ msgstr ""
msgid "checks" msgid "checks"
msgstr "" msgstr ""
#: 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
msgid "Checks failed" msgid "Checks failed"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
#: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23 #: src/tachyon/tabs/diagnostic/checks/getCheckItemsMeta.ts:23
#: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43 #: src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:43
#: src/tachyon/tabs/diagnostic/helpers/getMeta.ts:13
msgid "Checks passed" msgid "Checks passed"
msgstr "" msgstr ""
@@ -758,9 +771,10 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1717
#: src/partials/modal/renderModal.ts:263 #: src/partials/modal/renderModal.ts:263
#: src/tachyon/tabs/dashboard/initController.ts:1085 #: 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:884
#: src/tachyon/tabs/monitoring/initController.ts:934 #: src/tachyon/tabs/monitoring/initController.ts:934
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:28
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@@ -876,7 +890,7 @@ msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1693
#: src/partials/modal/renderModal.ts:258 #: src/partials/modal/renderModal.ts:258
#: src/tachyon/tabs/diagnostic/initController.ts:1189 #: src/tachyon/tabs/diagnostic/initController.ts:1194
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
@@ -894,7 +908,7 @@ msgstr ""
msgid "Country code (e.g. ru, us, de)" msgid "Country code (e.g. ru, us, de)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1157 #: src/tachyon/tabs/diagnostic/initController.ts:1162
msgid "Current Diagnosis" msgid "Current Diagnosis"
msgstr "" msgstr ""
@@ -923,6 +937,10 @@ msgstr ""
msgid "Custom DNS Records (Hosts)" msgid "Custom DNS Records (Hosts)"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1271
msgid "Custom OpenAI-Compatible API (OpenRouter)" msgid "Custom OpenAI-Compatible API (OpenRouter)"
msgstr "" msgstr ""
@@ -1021,7 +1039,7 @@ msgstr ""
msgid "Direct connection" msgid "Direct connection"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:86 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:88
msgid "Disable autostart" msgid "Disable autostart"
msgstr "" msgstr ""
@@ -1184,14 +1202,14 @@ msgstr ""
msgid "Do not test specified servers." msgid "Do not test specified servers."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:715 #: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:753 #: src/tachyon/tabs/diagnostic/initController.ts:758
#: src/tachyon/tabs/diagnostic/initController.ts:761 #: src/tachyon/tabs/diagnostic/initController.ts:766
msgid "Doctor failed" msgid "Doctor failed"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:731 #: src/tachyon/tabs/diagnostic/initController.ts:736
#: src/tachyon/tabs/diagnostic/initController.ts:740 #: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "Doctor repair" msgid "Doctor repair"
msgstr "" msgstr ""
@@ -1345,7 +1363,7 @@ msgstr ""
msgid "Enable automatic updates for remote lists and rule sets" msgid "Enable automatic updates for remote lists and rule sets"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:96 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:98
msgid "Enable autostart" msgid "Enable autostart"
msgstr "" msgstr ""
@@ -1568,7 +1586,7 @@ msgstr ""
msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation." msgid "External nfqws2 config files bypass Tachyon queue management and explicit validation."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1039 #: src/tachyon/tabs/diagnostic/initController.ts:1044
msgid "Failed to apply fix" msgid "Failed to apply fix"
msgstr "" msgstr ""
@@ -1596,7 +1614,11 @@ msgstr ""
msgid "Failed to execute" msgid "Failed to execute"
msgstr "" 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" msgid "Failed to generate bug report"
msgstr "" msgstr ""
@@ -1609,6 +1631,10 @@ msgstr ""
msgid "Failed to parse file:" msgid "Failed to parse file:"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8148
msgid "Failed to parse WARP config:" msgid "Failed to parse WARP config:"
msgstr "" msgstr ""
@@ -1688,6 +1714,10 @@ msgstr ""
msgid "Fastest" msgid "Fastest"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:3312
msgid "Filter the servers that will be displayed on the dashboard." msgid "Filter the servers that will be displayed on the dashboard."
msgstr "" msgstr ""
@@ -1700,11 +1730,11 @@ msgstr ""
msgid "Firewall WAN port" msgid "Firewall WAN port"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1050 #: src/tachyon/tabs/diagnostic/initController.ts:1055
msgid "Fix All" msgid "Fix All"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1034 #: src/tachyon/tabs/diagnostic/initController.ts:1039
msgid "Fix applied" msgid "Fix applied"
msgstr "" msgstr ""
@@ -1713,8 +1743,8 @@ msgstr ""
msgid "Fix the highlighted fields and save again." msgid "Fix the highlighted fields and save again."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:737 #: src/tachyon/tabs/diagnostic/initController.ts:742
#: src/tachyon/tabs/diagnostic/initController.ts:1030 #: src/tachyon/tabs/diagnostic/initController.ts:1035
msgid "Fixed" msgid "Fixed"
msgstr "" msgstr ""
@@ -1758,7 +1788,7 @@ msgstr ""
msgid "Generate a random 16-character hexadecimal HWID" msgid "Generate a random 16-character hexadecimal HWID"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:151 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:163
msgid "Generate bug report" msgid "Generate bug report"
msgstr "" msgstr ""
@@ -1809,11 +1839,11 @@ msgstr ""
msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>." msgid "GET endpoints are open on LAN. POST endpoints require Authorization: Bearer <token>."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:105 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:107
msgid "Get global check" msgid "Get global check"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:691 #: src/tachyon/tabs/diagnostic/initController.ts:696
msgid "Global check" msgid "Global check"
msgstr "" msgstr ""
@@ -1936,6 +1966,10 @@ msgstr ""
msgid "HTTP" msgid "HTTP"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:67
msgid "HTTP (ms)"
msgstr ""
#: src/tachyon/api.ts:27 #: src/tachyon/api.ts:27
msgid "HTTP error" msgid "HTTP error"
msgstr "" msgstr ""
@@ -2393,6 +2427,10 @@ msgstr ""
msgid "Invalid VMess URL: parsing failed" msgid "Invalid VMess URL: parsing failed"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10203
msgid "IP Addresses (IP CIDR)" msgid "IP Addresses (IP CIDR)"
msgstr "" msgstr ""
@@ -2413,12 +2451,12 @@ msgstr ""
msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans" msgid "Isolate BitTorrent traffic and force it direct to prevent VPN bans"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:733 #: src/tachyon/tabs/diagnostic/initController.ts:738
msgid "Issues" msgid "Issues"
msgstr "" msgstr ""
#: 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
msgid "Issues detected" msgid "Issues detected"
msgstr "" msgstr ""
@@ -2816,7 +2854,7 @@ msgstr ""
msgid "No Custom Rules Matched" msgid "No Custom Rules Matched"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1092 #: src/tachyon/tabs/diagnostic/initController.ts:1097
msgid "No diagnostic history available yet." msgid "No diagnostic history available yet."
msgstr "" msgstr ""
@@ -2824,6 +2862,10 @@ msgstr ""
msgid "No domains detected yet" msgid "No domains detected yet"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:57
msgid "No domains found to check."
msgstr ""
#: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187 #: src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:187
msgid "No enabled server inbounds configured" msgid "No enabled server inbounds configured"
msgstr "" msgstr ""
@@ -2832,7 +2874,7 @@ msgstr ""
msgid "No file selected" msgid "No file selected"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:740 #: src/tachyon/tabs/diagnostic/initController.ts:745
msgid "No issues found" msgid "No issues found"
msgstr "" msgstr ""
@@ -2844,7 +2886,7 @@ msgstr ""
msgid "No public firewall port required" msgid "No public firewall port required"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1082 #: src/tachyon/tabs/diagnostic/initController.ts:1087
msgid "No quick fix required" msgid "No quick fix required"
msgstr "" msgstr ""
@@ -2918,11 +2960,11 @@ msgstr ""
msgid "Not responding" msgid "Not responding"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/diagnostic.store.ts:137 #: src/tachyon/tabs/diagnostic/diagnostic.store.ts:140
#: src/tachyon/tabs/diagnostic/initController.ts:122 #: src/tachyon/tabs/diagnostic/initController.ts:123
#: src/tachyon/tabs/diagnostic/initController.ts:352 #: src/tachyon/tabs/diagnostic/initController.ts:353
#: src/tachyon/tabs/diagnostic/initController.ts:410 #: src/tachyon/tabs/diagnostic/initController.ts:411
#: src/tachyon/tabs/diagnostic/initController.ts:496 #: src/tachyon/tabs/diagnostic/initController.ts:497
msgid "Not running" msgid "Not running"
msgstr "" msgstr ""
@@ -3069,6 +3111,10 @@ msgstr ""
msgid "Or paste hosts file content:" msgid "Or paste hosts file content:"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:63
msgid "Outbound"
msgstr ""
#: src/validators/validateOutboundJson.ts:111 #: src/validators/validateOutboundJson.ts:111
msgid "outbounds must be a non-empty array of strings" msgid "outbounds must be a non-empty array of strings"
msgstr "" msgstr ""
@@ -3374,7 +3420,7 @@ msgstr ""
msgid "Rebuilt release" msgid "Rebuilt release"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1002 #: src/tachyon/tabs/diagnostic/initController.ts:1007
msgid "Recommended Smart Quick Fixes:" msgid "Recommended Smart Quick Fixes:"
msgstr "" msgstr ""
@@ -3463,7 +3509,7 @@ msgstr ""
msgid "Response Packet Magic Header (S4)" msgid "Response Packet Magic Header (S4)"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:56 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:58
msgid "Restart Tachyon" msgid "Restart Tachyon"
msgstr "" msgstr ""
@@ -3561,7 +3607,7 @@ msgstr ""
msgid "Rules proxy exist" msgid "Rules proxy exist"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:124 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:126
msgid "Run AI Doctor" msgid "Run AI Doctor"
msgstr "" msgstr ""
@@ -3569,11 +3615,11 @@ msgstr ""
msgid "Run Diagnostic" msgid "Run Diagnostic"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:114 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:116
msgid "Run doctor repair" msgid "Run doctor repair"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1169 #: src/tachyon/tabs/diagnostic/initController.ts:1174
msgid "Run History" msgid "Run History"
msgstr "" msgstr ""
@@ -3634,6 +3680,10 @@ msgstr ""
msgid "Section" msgid "Section"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10198
msgid "Section action" msgid "Section action"
msgstr "" msgstr ""
@@ -3868,10 +3918,14 @@ msgstr ""
#: src/tachyon/methods/shell/index.ts:401 #: src/tachyon/methods/shell/index.ts:401
#: src/tachyon/methods/shell/index.ts:422 #: 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" msgid "Service action failed"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9325
msgid "Service list" msgid "Service list"
msgstr "" msgstr ""
@@ -3922,8 +3976,8 @@ msgstr ""
msgid "Show servers whose names match the expression." msgid "Show servers whose names match the expression."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1282 #: src/tachyon/tabs/diagnostic/initController.ts:1287
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:142 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:154
msgid "Show sing-box config" msgid "Show sing-box config"
msgstr "" msgstr ""
@@ -3995,7 +4049,7 @@ msgstr ""
msgid "Snell Version" msgid "Snell Version"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1067 #: src/tachyon/tabs/diagnostic/initController.ts:1072
msgid "Some fixes failed" msgid "Some fixes failed"
msgstr "" msgstr ""
@@ -4091,7 +4145,7 @@ msgstr ""
msgid "Start bot" msgid "Start bot"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:76 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:78
msgid "Start Tachyon" msgid "Start Tachyon"
msgstr "" 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." msgid "Stop checking when URLTest group is not used. Use sing-box duration format like 1d, 12h or 30m."
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:66 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:68
msgid "Stop Tachyon" msgid "Stop Tachyon"
msgstr "" msgstr ""
@@ -4300,6 +4354,10 @@ msgstr ""
msgid "Tailscale hostname" msgid "Tailscale hostname"
msgstr "" 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 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/tachyon.js:473
msgid "Telegram Bot" msgid "Telegram Bot"
msgstr "" msgstr ""
@@ -4424,6 +4482,10 @@ msgstr ""
msgid "tiny" msgid "tiny"
msgstr "" 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:9531
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:9550
msgid "TLS / HTTPS" msgid "TLS / HTTPS"
@@ -4648,10 +4710,10 @@ msgid "Unknown country"
msgstr "" msgstr ""
#: src/tachyon/api.ts:40 #: src/tachyon/api.ts:40
#: src/tachyon/tabs/diagnostic/initController.ts:715 #: src/tachyon/tabs/diagnostic/initController.ts:720
#: src/tachyon/tabs/diagnostic/initController.ts:752 #: src/tachyon/tabs/diagnostic/initController.ts:757
#: src/tachyon/tabs/diagnostic/initController.ts:873 #: src/tachyon/tabs/diagnostic/initController.ts:878
#: src/tachyon/tabs/diagnostic/initController.ts:1211 #: src/tachyon/tabs/diagnostic/initController.ts:1216
msgid "Unknown error" msgid "Unknown error"
msgstr "" msgstr ""
@@ -4896,12 +4958,16 @@ msgstr ""
msgid "Value must not contain control characters" msgid "Value must not contain control characters"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:68
msgid "Verdict"
msgstr ""
#: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977 #: ../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:1977
msgid "Via country.is" msgid "Via country.is"
msgstr "" msgstr ""
#: src/tachyon/tabs/diagnostic/initController.ts:1247 #: src/tachyon/tabs/diagnostic/initController.ts:1252
#: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:133 #: src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:145
msgid "View logs" msgid "View logs"
msgstr "" 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]); clash_proxy_latencies_result(ARGV[1], ARGV[2]);
else if (mode == "clash-unknown-action") else if (mode == "clash-unknown-action")
clash_unknown_action(); clash_unknown_action();
else if (mode == "service-health-check")
system("ucode /usr/lib/tachyon/diagnostics/service_check.uc " + (ARGV[1] || ""));
else { else {
warn("Usage: diagnostics/status.uc <operation> ...\n"); warn("Usage: diagnostics/status.uc <operation> ...\n");
exit(1); exit(1);