diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index b099cf510..06932fe88 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -103,7 +103,9 @@ "tx": "TX", "mem": "الرام", "cpu": "المعالج", - "offline": "غير متصل" + "offline": "غير متصل", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "يعمل الان", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index c7824518c..5bdc71919 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -55,7 +55,9 @@ "rx": "RX", "tx": "TX", "mem": "MEM", - "cpu": "CPU" + "cpu": "CPU", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Възпроизвежда", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "ping": "Ping", + "error": "Error" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index f9aa5969a..1656dcc81 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -45,7 +45,9 @@ "tx": "Transmès", "mem": "Memòria", "cpu": "Processador", - "offline": "Fora de línia" + "offline": "Fora de línia", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Reproduint", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index fd11ea9d6..eaad12be1 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -57,7 +57,9 @@ "tx": "TX", "mem": "RAM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Přehrává", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index de0ac1d29..0350d7a25 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -181,7 +181,9 @@ "rx": "RX", "tx": "TX", "mem": "RAM", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Afspiller", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 224020202..ecc4141c7 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -23,7 +23,9 @@ "tx": "Tx", "mem": "Mem", "cpu": "Prozessor", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Spielen", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "ping": "Ping", + "error": "Error" } } diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 05c0fe5de..4d1b57743 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -56,7 +56,13 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" + }, + "ping": { + "error": "Error", + "ping": "Ping" }, "emby": { "playing": "Playing", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index e348d5343..5b9a79596 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -3,10 +3,10 @@ "missing_type": "Falta el tipo de widget: {{type}}", "api_error": "Error de API", "status": "Estado", - "information": "Information", + "information": "Información", "url": "URL", - "raw_error": "Raw Error", - "response_data": "Response Data" + "raw_error": "Error sin procesar", + "response_data": "Datos de respuesta" }, "search": { "placeholder": "Buscar…" @@ -23,7 +23,9 @@ "tx": "Transmitido", "mem": "Memoria", "cpu": "Procesador", - "offline": "Desconectado" + "offline": "Desconectado", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Reproduciendo", @@ -325,7 +327,11 @@ "country": "País" }, "hdhomerun": { - "channels": "Channels", - "hd": "HD" + "channels": "Canales", + "hd": "Alta definición" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index d35449e8d..916b8bc5a 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -29,7 +29,9 @@ "tx": "TX", "mem": "RAM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Toistaa", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index e56e056af..fc1ab2084 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -23,7 +23,9 @@ "tx": "Tx", "mem": "Mém", "cpu": "Cpu", - "offline": "Hors ligne" + "offline": "Hors ligne", + "error": "Erreur", + "unknown": "Inconnu" }, "emby": { "playing": "En lecture", @@ -325,7 +327,11 @@ "country": "Pays" }, "hdhomerun": { - "channels": "Channels", + "channels": "Canaux", "hd": "HD" + }, + "ping": { + "error": "Erreur", + "ping": "Ping" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 5c89ac331..cb61cc0e7 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -29,7 +29,9 @@ "tx": "TX", "mem": "זיכרון", "cpu": "מעבד", - "offline": "כבוי" + "offline": "כבוי", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "מנגן", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 7289852f8..6b3ff4a94 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -79,7 +79,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Playing", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 191a3d797..adb84f374 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -59,17 +59,19 @@ "missing_type": "Nedostajuća vrsta widgeta: {{type}}", "api_error": "API greška", "status": "Stanje", - "information": "Information", + "information": "Informacije", "url": "URL", - "raw_error": "Raw Error", - "response_data": "Response Data" + "raw_error": "Raw greška", + "response_data": "Podaci odgovora" }, "docker": { "rx": "RX", "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Nepovezan" + "offline": "Nepovezan", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Reprodukcija", @@ -320,12 +322,16 @@ "total": "Ukupno" }, "gluetun": { - "public_ip": "Public IP", - "region": "Region", - "country": "Country" + "public_ip": "Javni IP", + "region": "Regija", + "country": "Zemlja" }, "hdhomerun": { - "channels": "Channels", + "channels": "Kanali", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 6ba895aef..39f88a6ea 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -11,7 +11,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "lidarr": { "albums": "Albumok", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 0bf606392..aa9c713a2 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -4,7 +4,9 @@ "mem": "MEM", "cpu": "CPU", "offline": "Offline", - "rx": "RX" + "rx": "RX", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "In riproduzione", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index cb6bbb2ae..fa9cf98a9 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -150,7 +150,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Luar talian" + "offline": "Luar talian", + "error": "Error", + "unknown": "Unknown" }, "changedetectionio": { "totalObserved": "Jumlah Diperhatikan", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/nb-NO/common.json b/public/locales/nb-NO/common.json index 813422e2e..5982f463e 100644 --- a/public/locales/nb-NO/common.json +++ b/public/locales/nb-NO/common.json @@ -23,7 +23,9 @@ "tx": "Sendt", "mem": "Minne", "cpu": "Prosessor", - "offline": "Frakoblet" + "offline": "Frakoblet", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Spiller", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 5502dd8b1..172edfd2f 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -20,7 +20,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "speedtest": { "upload": "Upload", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 6754fcdad..c12e044cc 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -53,17 +53,19 @@ "missing_type": "Brakujący typ widżetu: {{type}}", "api_error": "Błąd API", "status": "Stan", - "url": "URL", - "information": "Information", - "raw_error": "Raw Error", - "response_data": "Response Data" + "url": "Adres URL", + "information": "Informacje", + "raw_error": "Niesformatowany błąd", + "response_data": "Dane odpowiedzi" }, "docker": { - "rx": "RX", - "tx": "TX", - "mem": "MEM", - "cpu": "CPU", - "offline": "Offline" + "rx": "Rx", + "tx": "Tx", + "mem": "Pamięć", + "cpu": "Procesor", + "offline": "Offline", + "error": "Błąd", + "unknown": "Nieznany" }, "nzbget": { "rate": "Szybkość", @@ -95,7 +97,7 @@ "wanted": "Poszukiwane", "queued": "W kolejce", "movies": "Filmy", - "missing": "Missing" + "missing": "Brakujące" }, "lidarr": { "wanted": "Poszukiwane", @@ -166,14 +168,14 @@ }, "mastodon": { "user_count": "Użytkownicy", - "status_count": "Posts", + "status_count": "Posty", "domain_count": "Domeny" }, "strelaysrv": { "numActiveSessions": "Sesje", "numConnections": "Połączenia", - "dataRelayed": "Relayed", - "transferRate": "Rate" + "dataRelayed": "Przekazane", + "transferRate": "Przesył" }, "authentik": { "users": "Użytkownicy", @@ -181,10 +183,10 @@ "failedLoginsLast24H": "Nieudane logowania (24h)" }, "proxmox": { - "mem": "MEM", - "cpu": "CPU", - "lxc": "LXC", - "vms": "VMs" + "mem": "Pamięć", + "cpu": "Procesor", + "lxc": "Kontenery LXC", + "vms": "Maszyn wirtualnych" }, "unifi": { "users": "Użytkownicy", @@ -203,25 +205,25 @@ "wlan_devices": "Urządzenia WLAN" }, "plex": { - "streams": "Active Streams", + "streams": "Aktywne strumienie", "movies": "Filmy", "tv": "Seriale" }, "glances": { - "cpu": "CPU", - "mem": "MEM", + "cpu": "Procesor", + "mem": "Pamięć", "wait": "Proszę czekać" }, "changedetectionio": { - "diffsDetected": "Diffs Detected", - "totalObserved": "Total Observed" + "diffsDetected": "Wykryto różnic", + "totalObserved": "Obserwowanych ogółem" }, "wmo": { - "77-day": "Snow Grains", + "77-day": "Ziarnisty śnieg", "0-day": "Słoneczny", - "0-night": "Clear", - "1-day": "Mainly Sunny", - "1-night": "Mainly Clear", + "0-night": "Bezchmurny", + "1-day": "Głównie słoneczny", + "1-night": "Głównie bezchmurny", "2-day": "Częściowo pochmurnie", "2-night": "Częściowo pochmurnie", "3-day": "Pochmurnie", @@ -236,10 +238,10 @@ "53-night": "Mżawka", "55-day": "Ciężka mżawka", "55-night": "Ciężka mżawka", - "56-day": "Light Freezing Drizzle", - "56-night": "Light Freezing Drizzle", - "57-day": "Freezing Drizzle", - "57-night": "Freezing Drizzle", + "56-day": "Lekko chłodna mżawka", + "56-night": "Lekko chłodna mżawka", + "57-day": "Chłodna mżawka", + "57-night": "Chłodna mżawka", "61-day": "Lekki deszcz", "61-night": "Lekki deszcz", "63-day": "Deszcz", @@ -256,7 +258,7 @@ "73-night": "Śnieg", "75-day": "Ciężki śnieg", "75-night": "Ciężki śnieg", - "77-night": "Snow Grains", + "77-night": "Ziarnisty śnieg", "80-day": "Lekkie opady", "80-night": "Lekkie opady", "81-day": "Opady", @@ -275,7 +277,7 @@ "99-night": "Burza z gradobiciem" }, "quicklaunch": { - "bookmark": "Bookmark", + "bookmark": "Zakładka", "service": "Usługi" }, "homebridge": { @@ -287,45 +289,49 @@ "child_bridges_status": "{{ok}}/{{total}}" }, "autobrr": { - "approvedPushes": "Approved", - "rejectedPushes": "Rejected", - "filters": "Filters", - "indexers": "Indexers" + "approvedPushes": "Zaakceptowane", + "rejectedPushes": "Odrzucone", + "filters": "Filtry", + "indexers": "Indeksery" }, "watchtower": { - "containers_scanned": "Scanned", - "containers_updated": "Updated", - "containers_failed": "Failed" + "containers_scanned": "Zeskanowane", + "containers_updated": "Zaktualizowane", + "containers_failed": "Niepowodzenie" }, "tubearchivist": { - "downloads": "Queue", - "videos": "Videos", - "channels": "Channels", - "playlists": "Playlists" + "downloads": "Kolejka", + "videos": "Pliki wideo", + "channels": "Kanały", + "playlists": "Playlisty" }, "truenas": { - "load": "System Load", - "uptime": "Uptime", - "alerts": "Alerts", + "load": "Obciążenie systemu", + "uptime": "Czas działania", + "alerts": "Ostrzeżenia", "time": "{{value, number(style: unit; unitDisplay: long;)}}" }, "navidrome": { - "please_wait": "Please Wait", - "nothing_streaming": "No Active Streams" + "please_wait": "Proszę czekać", + "nothing_streaming": "Brak aktywnych strumieni" }, "pyload": { - "speed": "Speed", - "active": "Active", - "queue": "Queue", - "total": "Total" + "speed": "Prędkość", + "active": "Aktywne", + "queue": "Kolejka", + "total": "Razem" }, "gluetun": { - "public_ip": "Public IP", + "public_ip": "Adres publiczny", "region": "Region", - "country": "Country" + "country": "Państwo" }, "hdhomerun": { - "channels": "Channels", + "channels": "Kanały", "hd": "HD" + }, + "ping": { + "error": "Błąd", + "ping": "Ping" } } diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index f6101ee05..ca4f39ef4 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -57,7 +57,9 @@ "tx": "Tx", "mem": "Mem", "cpu": "CPU", - "offline": "Desligado" + "offline": "Desligado", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Reproduzindo", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 1431ac43c..654cdb7ff 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -23,7 +23,9 @@ "tx": "Tx", "mem": "Mem", "cpu": "CPU", - "offline": "Desligado" + "offline": "Desligado", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "A reproduzir", @@ -338,5 +340,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index c98705f22..bd3022278 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -11,7 +11,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "jellyseerr": { "approved": "Aprobate", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index ac9a98230..9e7fe5267 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -23,7 +23,9 @@ "tx": "Тx", "mem": "Память", "cpu": "Процессор", - "offline": "Не в сети" + "offline": "Не в сети", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Воспроизведение", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index ed646d45d..94ab94624 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -45,7 +45,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Playing", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 6bdc8ee0f..a151bf357 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -26,7 +26,9 @@ "tx": "TX", "mem": "MEM", "cpu": "CPU", - "offline": "Offline" + "offline": "Offline", + "error": "Error", + "unknown": "Unknown" }, "search": { "placeholder": "Sök…" @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index d6ab211f6..85fb58461 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -46,7 +46,9 @@ "tx": "TX", "mem": "MEM", "cpu": "సీపియూ", - "offline": "ఆఫ్‌లైన్" + "offline": "ఆఫ్‌లైన్", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "ఆడుతున్నారు", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 053bd1b67..687ee14f9 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -45,7 +45,9 @@ "tx": "Giden Veri", "mem": "Bellek", "cpu": "İşlemci", - "offline": "Çevrimdışı" + "offline": "Çevrimdışı", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Oynatılıyor", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 228e7d938..5ab0537e6 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -23,7 +23,9 @@ "tx": "TX", "mem": "BỘ NHỚ", "cpu": "CPU", - "offline": "Ngoại tuyến" + "offline": "Ngoại tuyến", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Đang chơi", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 6c7d84de0..09f8ea7c5 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -47,7 +47,9 @@ "tx": "發送", "mem": "內存", "cpu": "處理器", - "offline": "離線" + "offline": "離線", + "error": "Error", + "unknown": "Unknown" }, "nzbget": { "rate": "速度", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 2337bb023..1a25f9cdf 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -23,7 +23,9 @@ "tx": "发送", "mem": "内存", "cpu": "处理器", - "offline": "离线" + "offline": "离线", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "播放中", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index cd508662c..3c61740ac 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -19,7 +19,9 @@ "offline": "Offline", "tx": "TX", "mem": "MEM", - "cpu": "CPU" + "cpu": "CPU", + "error": "Error", + "unknown": "Unknown" }, "emby": { "playing": "Playing", @@ -327,5 +329,9 @@ "hdhomerun": { "channels": "Channels", "hd": "HD" + }, + "ping": { + "error": "Error", + "ping": "Ping" } } diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index aa8e80962..6c731c292 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -3,6 +3,7 @@ import { useContext, useState } from "react"; import Status from "./status"; import Widget from "./widget"; +import Ping from "./ping"; import Docker from "widgets/docker/component"; import { SettingsContext } from "utils/contexts/settings"; @@ -30,7 +31,7 @@ export default function Item({ service }) {
{service.icon && @@ -70,16 +71,25 @@ export default function Item({ service }) {
)} - {service.container && ( - - )} +
+ {service.ping && ( +
+ + Ping status +
+ )} + + {service.container && ( + + )} +
{service.container && service.server && ( diff --git a/src/components/services/ping.jsx b/src/components/services/ping.jsx new file mode 100644 index 000000000..e30562323 --- /dev/null +++ b/src/components/services/ping.jsx @@ -0,0 +1,44 @@ +import { useTranslation } from "react-i18next"; +import useSWR from "swr"; + +export default function Ping({ service }) { + const { t } = useTranslation(); + const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ping: service.ping}).toString()}`, { + refreshInterval: 30000 + }); + + if (error) { + return ( +
+
{t("ping.error")}
+
+ ); + } + + if (!data) { + return ( +
+
{t("ping.ping")}
+
+ ); + } + + const statusText = `${service.ping}: HTTP status ${data.status}`; + + if (data && data.status !== 200) { + return ( +
+
{data.status}
+
+ ); + } + + if (data && data.status === 200) { + return ( +
+
{t("common.ms", { value: data.latency, style: "unit", unit: "millisecond", unitDisplay: "narrow", maximumFractionDigits: 0 })}
+
+ ); + } + +} diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx index dc9034081..2d07e49e8 100644 --- a/src/components/services/status.jsx +++ b/src/components/services/status.jsx @@ -1,19 +1,36 @@ +import { useTranslation } from "react-i18next"; import useSWR from "swr"; export default function Status({ service }) { + const { t } = useTranslation(); + const { data, error } = useSWR(`/api/docker/status/${service.container}/${service.server || ""}`); if (error) { - return
; +
+
{t("docker.error")}
+
} if (data && data.status === "running") { - return
; + return ( +
+
{data.status}
+
+ ); } - if (data && data.status === "not found") { - return
; + if (data && (data.status === "not found" || data.status === "exited")) { + return ( +
+
{data.status}
+
+ ); } - return
; + return ( +
+
{t("docker.unknown")}
+
+ ); } diff --git a/src/pages/api/ping.js b/src/pages/api/ping.js new file mode 100644 index 000000000..79c7da0c9 --- /dev/null +++ b/src/pages/api/ping.js @@ -0,0 +1,28 @@ +import { performance } from "perf_hooks"; + +import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; + +const logger = createLogger("ping"); + +export default async function handler(req, res) { + const { ping: pingURL } = req.query; + + if (!pingURL) { + logger.debug("No ping URL specified"); + return res.status(400).send({ + error: "No ping URL given", + }); + } + + const startTime = performance.now(); + const [status] = await httpProxy(pingURL, { + method: "HEAD" + }); + const endTime = performance.now(); + + return res.status(200).json({ + status, + latency: endTime - startTime + }); +} diff --git a/src/utils/logger.js b/src/utils/logger.js index 5ad935469..048c5356c 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -4,10 +4,15 @@ import { format as utilFormat } from "node:util"; import winston from "winston"; +import checkAndCopyConfig, { getSettings } from "utils/config/config"; + let winstonLogger; function init() { const configPath = join(process.cwd(), "config"); + checkAndCopyConfig("settings.yaml"); + const settings = getSettings(); + const logpath = settings.logpath || configPath; function combineMessageAndSplat() { return { @@ -57,7 +62,7 @@ function init() { winston.format.timestamp(), winston.format.printf(messageFormatter) ), - filename: `${configPath}/logs/homepage.log`, + filename: `${logpath}/logs/homepage.log`, handleExceptions: true, handleRejections: true, }), diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index 93538202d..16b58bf70 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -96,7 +96,7 @@ export async function httpProxy(url, params = {}) { return [status, contentType, data, responseHeaders]; } catch (err) { - logger.error("Error calling %s//%s%s...", url.protocol, url.hostname, url.pathname); + logger.error("Error calling %s//%s%s...", constructedUrl.protocol, constructedUrl.hostname, constructedUrl.pathname); logger.error(err); return [500, "application/json", { error: {message: err?.message ?? "Unknown error", url, rawError: err} }, null]; }