Merge upstream 383b426e (GeoIP localization + dnsmasq DNS-cache monitoring)

Keep both: upstream RAM-usage calculator for dns_cache_size and the fork
AdGuard Home DNS mode options (dns_main_mode / dns_adguard_failover_enabled).
This commit is contained in:
2026-09-17 21:52:45 +03:00
15 changed files with 3826 additions and 3298 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+25 -7
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: TACHYON\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-17 19:42+0300\n"
"PO-Revision-Date: 2026-09-17 19:42+0300\n"
"POT-Creation-Date: 2026-09-17 20:48+0300\n"
"PO-Revision-Date: 2026-09-17 20:48+0300\n"
"Last-Translator: Dushnilin\n"
"Language-Team: none\n"
"Language: ru\n"
@@ -425,6 +425,9 @@ msgstr "Все сервисы"
msgid "All traffic from these IP addresses will be routed through the section unconditionally, ignoring all other conditions."
msgstr "Весь трафик от этих IP-адресов будет маршрутизирован через секцию безусловно, игнорируя все остальные условия."
msgid "allocated dynamically on demand, not upfront"
msgstr "выделяется динамически по мере запросов, а не сразу"
msgid "Allow / Enable ONLY in scheduled hours (White period)"
msgstr "Разрешать / Включать ТОЛЬКО в указанные часы (Белый список)"
@@ -863,6 +866,9 @@ msgstr "Обходит UDP-трафик для выбранных игровых
msgid "CA Certificate"
msgstr "CA-сертификат"
msgid "Cache"
msgstr ""
msgid "Cache all built-in lists and databases even if they are not currently selected in any section. Recommended if you have plenty of storage space or USB drive."
msgstr "Кэшировать все встроенные списки и базы данных, даже если они не выбраны ни в одной секции. Рекомендуется при большом объёме хранилища или USB-накопителе."
@@ -1439,8 +1445,8 @@ msgstr "Автоподбор и бенчмарк DNS"
msgid "DNS Blocking"
msgstr "Блокировка DNS"
msgid "DNS Cache Size"
msgstr "Размер кэша DNS"
msgid "DNS Cache Size (entries)"
msgstr "Размер DNS-кэша (записей)"
msgid "DNS Check Interval"
msgstr "Интервал проверки DNS"
@@ -1874,6 +1880,9 @@ msgstr "Ошибка выполнения трассировки:"
msgid "Error updating lists:"
msgstr "Ошибка обновления списков:"
msgid "Estimated RAM usage (max):"
msgstr "Ориентировочный объём RAM (макс.):"
msgid "Every day"
msgstr "Каждый день"
@@ -3104,6 +3113,9 @@ msgstr "Локальный адрес"
msgid "Local DNS Cache"
msgstr "Локальный кэш DNS"
msgid "Local DNS caching disabled (0 entries)"
msgstr "Локальное DNS-кэширование отключено (0 записей)"
msgid "Local SOCKS proxy desynchronizer (ciadpi)"
msgstr "Локальный десинхронизатор SOCKS-прокси (ciadpi)"
@@ -3176,6 +3188,9 @@ msgstr "Максимально допустимый суммарный траф
msgid "Maximum allowed online time per guest device per day. When reached, access is blocked until midnight. Enter 0 for unlimited."
msgstr "Максимально допустимое время доступа в интернет на одно гостевое устройство в день. При исчерпании доступ блокируется до полуночи. Введите 0 для отсутствия ограничений."
msgid "Maximum number of cached domain entries in dnsmasq (default: 10000 ≈ 1.2 MB RAM). Memory is allocated dynamically per request (~120 B per domain), not pre-allocated upfront. Recommended: 10000 for routers with ≥128 MB RAM, 2500–5000 for 64 MB devices."
msgstr "Максимальный лимит кэшируемых доменов в dnsmasq (по умолчанию: 10000 ≈ 1.2 МБ RAM). Память выделяется динамически по мере запросов (~120 Б на домен), а не резервируется сразу. Рекомендуется: 10000 для роутеров от 128 МБ RAM, 2500–5000 для 64 МБ устройств."
msgid "Maximum size of junk packets"
msgstr "Максимальный размер мусорных пакетов"
@@ -3479,9 +3494,6 @@ msgstr "Уведомлять о перезапусках сервиса"
msgid "Notify on Subscription Updates"
msgstr "Уведомлять об обновлениях подписок"
msgid "Number of cached DNS domain entries in dnsmasq (default: 10000)."
msgstr "Количество кэшируемых доменных записей в dnsmasq (по умолчанию: 10000)."
msgid "Number of consecutive failed checks required before switching DNS servers."
msgstr "Количество последовательных неудачных проверок до переключения DNS-серверов."
@@ -5990,6 +6002,12 @@ msgstr "Правила маршрутизации sing-box для Zapret2 не
msgid "Zero config mesh VPN daemon"
msgstr "Mesh VPN-демон с нулевой конфигурацией"
msgid "DNS Cache Size"
msgstr "Размер кэша DNS"
msgid "Number of cached DNS domain entries in dnsmasq (default: 10000)."
msgstr "Количество кэшируемых доменных записей в dnsmasq (по умолчанию: 10000)."
msgid "Add URLs or local paths to .srs / .json lists. Only domain rules are supported."
msgstr "Добавьте URL или локальные пути к спискам .srs / .json. Поддерживаются только правила доменов."
@@ -76,6 +76,10 @@ export async function fetchServicesInfo() {
: previousData.watchdogRunning,
zapret2Running: previousData.zapret2Running,
zapret2MemoryMb: previousData.zapret2MemoryMb,
dnsmasqRunning: previousData.dnsmasqRunning,
dnsmasqMemoryMb: previousData.dnsmasqMemoryMb,
dnsmasqLocalCacheEnabled: previousData.dnsmasqLocalCacheEnabled,
dnsmasqCacheSize: previousData.dnsmasqCacheSize,
},
},
});
@@ -170,6 +170,10 @@ export interface StoreType {
singboxMemoryMb?: number;
zapret2Running?: number;
zapret2MemoryMb?: number;
dnsmasqRunning?: number;
dnsmasqMemoryMb?: number;
dnsmasqLocalCacheEnabled?: number;
dnsmasqCacheSize?: number;
};
};
tailscaleWidget: {
@@ -135,6 +135,18 @@ function applyServiceState(uiState: Tachyon.UiState) {
zapret2MemoryMb: uiState.service.zapret2
? uiState.service.zapret2.memory_rss_mb
: undefined,
dnsmasqRunning: uiState.service.dnsmasq
? uiState.service.dnsmasq.running
: undefined,
dnsmasqMemoryMb: uiState.service.dnsmasq
? uiState.service.dnsmasq.memory_rss_mb
: undefined,
dnsmasqLocalCacheEnabled: uiState.service.dnsmasq
? uiState.service.dnsmasq.local_cache_enabled
: undefined,
dnsmasqCacheSize: uiState.service.dnsmasq
? uiState.service.dnsmasq.cache_size
: undefined,
},
},
diagnosticsSystemInfo: normalizeSingBoxVariantFields(nextSystemInfo),
@@ -2251,6 +2251,30 @@ async function renderServicesInfoWidget() {
});
}
if (data.dnsmasqRunning != null) {
let cacheDetail = '';
if (data.dnsmasqLocalCacheEnabled && data.dnsmasqCacheSize) {
const approxMb = (
(data.dnsmasqCacheSize * 120) /
(1024 * 1024)
).toFixed(1);
cacheDetail = ` [${_('Cache')}: ${data.dnsmasqCacheSize} ≈ ${approxMb} MB]`;
}
items.push({
key: 'Dnsmasq (DNS)',
value: data.dnsmasqRunning
? data.dnsmasqMemoryMb
? `${_('✔ Running')} (${data.dnsmasqMemoryMb} MB)${cacheDetail}`
: `${_('✔ Running')}${cacheDetail}`
: _('✘ Stopped'),
attributes: {
class: data.dnsmasqRunning
? 'tachyon_dashboard-page__widgets-section__item__row--success'
: 'tachyon_dashboard-page__widgets-section__item__row--error',
},
});
}
return items;
},
'renderServicesInfoWidget',
+6
View File
@@ -756,6 +756,12 @@ export namespace Tachyon {
running: number;
memory_rss_mb?: number;
};
dnsmasq?: {
running: number;
memory_rss_mb?: number;
local_cache_enabled?: number;
cache_size?: number;
};
};
capabilities: GetUiCapabilities;
actions: {