diff --git a/CHANGELOG.md b/CHANGELOG.md index dc4cafcc..2759564e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,11 +14,11 @@ and this project adheres to @@ -29,6 +29,33 @@ NOTE: Add new changes ABOVE THIS COMMENT. +## [v0.107.40] - 2023-10-18 + +See also the [v0.107.40 GitHub milestone][ms-v0.107.40]. + +### Changed + +- *Block* and *Unblock* buttons of the query log moved to the tooltip menu + ([#684]). + +### Fixed + +- Dashboard tables scroll issue ([#6180]). +- The time shown in the statistics is one hour less than the current time + ([#6296]). +- Issues with QUIC and HTTP/3 upstreams on FreeBSD ([#6301]). +- Panic on clearing the query log ([#6304]). + +[#684]: https://github.com/AdguardTeam/AdGuardHome/issues/684 +[#6180]: https://github.com/AdguardTeam/AdGuardHome/issues/6180 +[#6296]: https://github.com/AdguardTeam/AdGuardHome/issues/6296 +[#6301]: https://github.com/AdguardTeam/AdGuardHome/issues/6301 +[#6304]: https://github.com/AdguardTeam/AdGuardHome/issues/6304 + +[ms-v0.107.40]: https://github.com/AdguardTeam/AdGuardHome/milestone/75?closed=1 + + + ## [v0.107.39] - 2023-10-11 See also the [v0.107.39 GitHub milestone][ms-v0.107.39]. @@ -47,7 +74,7 @@ See also the [v0.107.39 GitHub milestone][ms-v0.107.39]. ### Changed -- ipset entries are updated more often ([#6233]). +- `ipset` entries are updated more frequently ([#6233]). - Node.JS 16 is now required to build the frontend. ### Fixed @@ -66,9 +93,8 @@ See also the [v0.107.39 GitHub milestone][ms-v0.107.39]. [#6233]: https://github.com/AdguardTeam/AdGuardHome/issues/6233 [#6280]: https://github.com/AdguardTeam/AdGuardHome/issues/6280 -[go-1.20.9]: https://groups.google.com/g/golang-announce/c/XBa1oHDevAo/m/desYyx3qAgAJ -[go-1.20.10]: https://groups.google.com/g/golang-announce/c/iNNxDTCjZvo/m/UDd7VKQuAAAJ - +[go-1.20.10]: https://groups.google.com/g/golang-announce/c/iNNxDTCjZvo/m/UDd7VKQuAAAJ +[go-1.20.9]: https://groups.google.com/g/golang-announce/c/XBa1oHDevAo/m/desYyx3qAgAJ [ms-v0.107.39]: https://github.com/AdguardTeam/AdGuardHome/milestone/74?closed=1 @@ -2531,11 +2557,12 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2]. -[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.39...HEAD +[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.40...HEAD +[v0.107.40]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.39...v0.107.40 [v0.107.39]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.38...v0.107.39 [v0.107.38]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.37...v0.107.38 [v0.107.37]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.36...v0.107.37 diff --git a/client/src/__locales/be.json b/client/src/__locales/be.json index 9ec3a7a1..3dd62d98 100644 --- a/client/src/__locales/be.json +++ b/client/src/__locales/be.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Заблакаваныя шкодныя і фішынгавыя сайты", "stats_adult": "Заблакаваныя «дарослыя» сайты", "stats_query_domain": "Часта запытаныя дамены", - "for_last_24_hours": "за 24 гадзіны", + "for_last_hours": "за апошнюю {{count}} гадзіну", + "for_last_hours_plural": "за апошнія {{count}} гадзін", "for_last_days": "за апошні {{count}} дзень", "for_last_days_plural": "за апошнія {{count}} дзён", "stats_disabled": "Статыстыка была адключаная. Вы можаце ўключыць яго <0>на старонцы налад .", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Няма дадзеных аб upstream серверах", "number_of_dns_query_days": "Колькасць DNS-запытаў за апошні {{count}} дзень", "number_of_dns_query_days_plural": "Колькасць DNS запытаў, апрацаваных за апошнія {{count}} дзён", - "number_of_dns_query_24_hours": "Колькасць DNS-запытаў за 24 гадзіны", + "number_of_dns_query_hours": "Колькасць DNS-запытаў, апрацаваных за апошнюю {{count}} гадзіну", + "number_of_dns_query_hours_plural": "Колькасць DNS-запытаў, апрацаваных за апошнія {{count}} гадзін", "number_of_dns_query_blocked_24_hours": "Колькасць DNS-запытаў, заблакаваных фільтрамі і блок-спісамі", "number_of_dns_query_blocked_24_hours_by_sec": "Колькасць DNS-запытаў, заблакаваных модулем Антыфішынгу AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Колькасць заблакаваных «сайтаў для дарослых»", diff --git a/client/src/__locales/cs.json b/client/src/__locales/cs.json index 4571fe13..7db7aae9 100644 --- a/client/src/__locales/cs.json +++ b/client/src/__locales/cs.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokovaný malware/podvody", "stats_adult": "Blokované stránky pro dospělé", "stats_query_domain": "Nejčastěji dotazované domény", - "for_last_24_hours": "za posledních 24 hodin", + "for_last_hours": "za poslední {{count}} hodinu", + "for_last_hours_plural": "za posledních {{count}} hodin", "for_last_days": "za posledních {{count}} dní", "for_last_days_plural": "za posledních {{count}} dní", "stats_disabled": "Statistiky byly vypnuty. Můžete je zapnout ze <0>stránky nastavení.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nebyla nalezena žádná data odchozích připojení", "number_of_dns_query_days": "Počet DNS dotazů zpracovaných za posledních {{count}} den", "number_of_dns_query_days_plural": "Počet DNS dotazů zpracovaných za posledních {{count}} dní", - "number_of_dns_query_24_hours": "Počet DNS dotazů zpracovaných za posledních 24 hodin", + "number_of_dns_query_hours": "Počet DNS dotazů zpracovaných za poslední {{count}} hodinu", + "number_of_dns_query_hours_plural": "Počet DNS dotazů zpracovaných za posledních {{count}} hodin", "number_of_dns_query_blocked_24_hours": "Počet požadavků DNS zablokovaných filtrem reklam a seznamy blokování hostitelů", "number_of_dns_query_blocked_24_hours_by_sec": "Počet požadavků DNS zablokovaných AdGuard modulem Bezpečné prohlížení", "number_of_dns_query_blocked_24_hours_adult": "Počet zablokovaných stránek pro dospělé", diff --git a/client/src/__locales/da.json b/client/src/__locales/da.json index b415bc24..064d4123 100644 --- a/client/src/__locales/da.json +++ b/client/src/__locales/da.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokeret malware/phishing", "stats_adult": "Blokerede voksne websteder", "stats_query_domain": "Mest forespurgte domæner", - "for_last_24_hours": "de seneste 24 timer", + "for_last_hours": "den seneste {{count}} time", + "for_last_hours_plural": "de seneste {{count}} timer", "for_last_days": "den seneste {{count}} dag", "for_last_days_plural": "de seneste {{count}} dage", "stats_disabled": "Statistikker er deaktiveret. De kan aktiveres via <0>indstillingssiden.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Ingen upstreams-data fundet", "number_of_dns_query_days": "Antallet af DNS-forespørgsler behandlet den seneste {{count}} dag", "number_of_dns_query_days_plural": "Antallet af DNS-forespørgsler behandlet de seneste {{count}} dage", - "number_of_dns_query_24_hours": "Antallet af DNS-forespørgsler behandlet de seneste 24 timer", + "number_of_dns_query_hours": "Antallet af DNS-forespørgsler behandlet den seneste {{count}} time", + "number_of_dns_query_hours_plural": "Antallet af DNS-forespørgsler behandlet de seneste {{count}} timer", "number_of_dns_query_blocked_24_hours": "Antallet af DNS-forespørgsler blokeret af adblockfiltre og værtssortlister", "number_of_dns_query_blocked_24_hours_by_sec": "Antallet af DNS-forespørgsler blokeret af AdGuards browsingsikkerhedsmodul", "number_of_dns_query_blocked_24_hours_adult": "Antallet af blokerede voksenwebsteder", diff --git a/client/src/__locales/de.json b/client/src/__locales/de.json index 6d78073c..7c40eb89 100644 --- a/client/src/__locales/de.json +++ b/client/src/__locales/de.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Gesperrte Schädliche/Phishing-Websites", "stats_adult": "Gesperrte jugendgefährdende Websites", "stats_query_domain": "Am häufigsten angefragte Domains", - "for_last_24_hours": "für die letzten 24 Stunden", + "for_last_hours": "in die letzte {{count}} Stunde", + "for_last_hours_plural": "in die letzten {{count}} Stunden", "for_last_days": "am letzten {{count}} Tag", "for_last_days_plural": "in den letzten {{count}} Tage", "stats_disabled": "Die Statistik wurde deaktiviert. Sie können diese in den <0>Einstellungen erneut aktivieren.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Keine Upstream-Daten gefunden", "number_of_dns_query_days": "Anzahl der in den letzten {{count}} Tagen verarbeiteten DNS-Anfragen", "number_of_dns_query_days_plural": "Anzahl der DNS-Abfragen, die in den letzten {{count}} Tagen verarbeitet wurden", - "number_of_dns_query_24_hours": "Anzahl der in den letzten 24 Stunden durchgeführten DNS-Anfragen", + "number_of_dns_query_hours": "Die Anzahl der DNS-Anfragen, die in der letzten {{count}} Stunde verarbeitet wurden", + "number_of_dns_query_hours_plural": "Die Anzahl der DNS-Anfragen, die in den letzten {{count}} Stunden verarbeitet wurden", "number_of_dns_query_blocked_24_hours": "Anzahl der durch Werbefilter und Host-Sperrlisten abgelehnte DNS-Anfragen", "number_of_dns_query_blocked_24_hours_by_sec": "Anzahl der durch das AdGuard-Modul „Internetsicherheit“ gesperrten DNS-Anfragen", "number_of_dns_query_blocked_24_hours_adult": "Anzahl der gesperrten Websites mit jugendgefährdenden Inhalten", diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index c7e9fe46..5f5a9ca8 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blocked malware/phishing", "stats_adult": "Blocked adult websites", "stats_query_domain": "Top queried domains", - "for_last_24_hours": "for the last 24 hours", + "for_last_hours": "for the last {{count}} hour", + "for_last_hours_plural": "for the last {{count}} hours", "for_last_days": "for the last {{count}} day", "for_last_days_plural": "for the last {{count}} days", "stats_disabled": "The statistics have been disabled. You can turn it on from the <0>settings page.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "No upstreams data found", "number_of_dns_query_days": "The number of DNS queries processed for the last {{count}} day", "number_of_dns_query_days_plural": "The number of DNS queries processed for the last {{count}} days", - "number_of_dns_query_24_hours": "The number of DNS queries processed for the last 24 hours", + "number_of_dns_query_hours": "The number of DNS queries processed for the last {{count}} hour", + "number_of_dns_query_hours_plural": "The number of DNS queries processed for the last {{count}} hours", "number_of_dns_query_blocked_24_hours": "The number of DNS requests blocked by adblock filters and hosts blocklists", "number_of_dns_query_blocked_24_hours_by_sec": "The number of DNS requests blocked by the AdGuard browsing security module", "number_of_dns_query_blocked_24_hours_adult": "The number of adult websites blocked", diff --git a/client/src/__locales/es.json b/client/src/__locales/es.json index 3cc1ec52..2af3c571 100644 --- a/client/src/__locales/es.json +++ b/client/src/__locales/es.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Malware/phishing bloqueado", "stats_adult": "Sitios web para adultos bloqueado", "stats_query_domain": "Dominios más consultados", - "for_last_24_hours": "en las últimas 24 horas", + "for_last_hours": "de la última {{count}} hora", + "for_last_hours_plural": "de las últimas {{count}} horas", "for_last_days": "durante los últimos {{count}} días", "for_last_days_plural": "durante los últimos {{count}} días", "stats_disabled": "Las estadísticas se han deshabilitado. Puedes habilitarlas desde la <0>página de configuración.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "No se han encontrado datos de upstreams", "number_of_dns_query_days": "Número de consultas DNS procesadas durante el último {{count}} día", "number_of_dns_query_days_plural": "Número de consultas DNS procesadas durante los últimos {{count}} días", - "number_of_dns_query_24_hours": "Número de consultas DNS procesadas durante las últimas 24 horas", + "number_of_dns_query_hours": "Número de consultas DNS procesadas durante la última {{count}} hora", + "number_of_dns_query_hours_plural": "Número de consultas DNS procesadas durante las últimas {{count}} horas", "number_of_dns_query_blocked_24_hours": "Número de peticiones DNS bloqueadas por los filtros y listas de bloqueo de hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Número de peticiones DNS bloqueadas por el módulo de seguridad de navegación de AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Número de sitios web para adultos bloqueado", diff --git a/client/src/__locales/fi.json b/client/src/__locales/fi.json index 5c37f822..5a3f4fb5 100644 --- a/client/src/__locales/fi.json +++ b/client/src/__locales/fi.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Estetyt haittaohjelmat/tietojenkalastelut", "stats_adult": "Estetyt aikuisille tarkoitetut sivustot", "stats_query_domain": "Kysytyimmät verkkotunnukset", - "for_last_24_hours": "viimeisten 24 tunnin ajalta", + "for_last_hours": "viimeisen {{count}} tunnin ajalta", + "for_last_hours_plural": "viimeisen {{count}} tunnin ajalta", "for_last_days": "viimeisten {{count}} päivän ajalta", "for_last_days_plural": "viimeisten {{count}} päivän ajalta", "stats_disabled": "Tilastointi ei ole käytössä. Voit ottaa sen käyttöön <0>asetuksista.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Ylävirtatietoja ei löytynyt", "number_of_dns_query_days": "Käsiteltyjen DNS-pyyntöjen määrä viimeisten {{count}} päivän ajalta", "number_of_dns_query_days_plural": "Käsiteltyjen DNS-pyyntöjen määrä viimeisten {{count}} päivän ajalta", - "number_of_dns_query_24_hours": "Käsiteltyjen DNS-pyyntöjen määrä viimeisten 24 tunnin ajalta", + "number_of_dns_query_hours": "Viimeisen {{count}} tunnin aikana käsiteltyjen DNS-kyselyiden määrä", + "number_of_dns_query_hours_plural": "Viimeisen {{count}} tunnin aikana käsiteltyjen DNS-kyselyiden määrä", "number_of_dns_query_blocked_24_hours": "Mainoseston suodattimien ja hosts-estolistojen estämien DNS-pyyntöjen määrä", "number_of_dns_query_blocked_24_hours_by_sec": "AdGuardin Turvallinen selaus -moduulin estämien DNS-pyyntöjen määrä", "number_of_dns_query_blocked_24_hours_adult": "Estettyjen aikuisille tarkoitettujen sivustojen määrä", diff --git a/client/src/__locales/fr.json b/client/src/__locales/fr.json index 1ae169e6..146a3860 100644 --- a/client/src/__locales/fr.json +++ b/client/src/__locales/fr.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Tentative de malware/hameçonnage bloquée", "stats_adult": "Sites à contenu adulte bloqués", "stats_query_domain": "Domaines les plus recherchés", - "for_last_24_hours": "pendant les dernières 24 heures", + "for_last_hours": "pendant la dernière {{count}} heure", + "for_last_hours_plural": "pendant les dernières {{count}} heures", "for_last_days": "pour les {{count}} derniers jours", "for_last_days_plural": "pour les {{count}} derniers jours", "stats_disabled": "Les statistiques ont été désactivées. Vous pouvez l'activer à partir de la <0>page des paramètres.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Aucune donnée en amont trouvée", "number_of_dns_query_days": "Le nombre de requêtes DNS traitées pour les {{count}} derniers jours", "number_of_dns_query_days_plural": "Le nombre de requêtes DNS traitées ces {{count}} derniers jours", - "number_of_dns_query_24_hours": "Le nombre de requêtes DNS traitées au cours des 24 dernières heures", + "number_of_dns_query_hours": "Le nombre de requêtes DNS traitées pendant la dernière {{count}} heure", + "number_of_dns_query_hours_plural": "Le nombre de requêtes DNS traitées pendant les dernières {{count}} heures", "number_of_dns_query_blocked_24_hours": "Le nombre de requêtes DNS bloquées par les filtres adblock et les listes de blocage des hôtes", "number_of_dns_query_blocked_24_hours_by_sec": "Le nombre de requêtes DNS bloquées par le module Sécurité de navigation d'AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Le nombre de sites à contenu adulte bloqués", diff --git a/client/src/__locales/hr.json b/client/src/__locales/hr.json index 6e4c7d7e..5cef8b1b 100644 --- a/client/src/__locales/hr.json +++ b/client/src/__locales/hr.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokiran zločudni program/krađe identiteta", "stats_adult": "Blokirane web stranice za odrasle", "stats_query_domain": "Top tražene domene", - "for_last_24_hours": "u zadnja 24 sata", + "for_last_hours": "za posljednji {{count}} sat", + "for_last_hours_plural": "za posljednjih {{count}} sati", "for_last_days": "zadnjih {{count}} dana", "for_last_days_plural": "zadnjih {{count}} dana", "stats_disabled": "Statistika je onemogućena. Možete ga uključiti sa <0>stranice s postavkama.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nema podataka o upstream poslužiteljima", "number_of_dns_query_days": "Broj DNS upita obrađenih u posljednja {{count}} dan", "number_of_dns_query_days_plural": "Broj DNS upita obrađenih u posljednja {{count}} dana", - "number_of_dns_query_24_hours": "Broj DNS upita obrađenih u posljednja 24 sata", + "number_of_dns_query_hours": "Broj DNS upita obrađenih za posljednji {{count}} sat", + "number_of_dns_query_hours_plural": "Broj DNS upita obrađenih za posljednjih {{count}} sati", "number_of_dns_query_blocked_24_hours": "Broj DNS zahtjeva koji blokiraju filtri za blokiranje oglasa i popisi blokova hostova", "number_of_dns_query_blocked_24_hours_by_sec": "Broj DNS zahtjeva koje je blokirao modul AdGuard zaštita pregledavanja", "number_of_dns_query_blocked_24_hours_adult": "Broj blokiranih stranica s sadržajem za odrasle", diff --git a/client/src/__locales/hu.json b/client/src/__locales/hu.json index 18c04f4d..8dc1b000 100644 --- a/client/src/__locales/hu.json +++ b/client/src/__locales/hu.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokkolt kártevő/adathalászat", "stats_adult": "Blokkolt felnőtt tartalom", "stats_query_domain": "Leglátogatottabb domainek", - "for_last_24_hours": "az utóbbi 24 órában", + "for_last_hours": "az utolsó {{count}} órában", + "for_last_hours_plural": "az utolsó {{count}} órában", "for_last_days": "az utóbbi {{count}} napban", "for_last_days_plural": "az utóbbi {{count}} napban", "stats_disabled": "Ezek a statisztikák ki lettek kapcsolva. Be tudja kapcsolni őket a <0>beállítások oldalon.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nem található upstream szerver adat", "number_of_dns_query_days": "Lekérdezések száma az utolsó {{count}} napban", "number_of_dns_query_days_plural": "Feldolgozott DNS lekérdezések száma az utolsó {{count}} napban", - "number_of_dns_query_24_hours": "Az elmúlt 24 órában feldolgozott DNS lekérdezések száma", + "number_of_dns_query_hours": "Feldolgozott DNS lekérdezések száma az utolsó {{count}} órában", + "number_of_dns_query_hours_plural": "Feldolgozott DNS lekérdezések száma az utolsó {{count}} órában", "number_of_dns_query_blocked_24_hours": "A hirdetésblokkoló szűrők és a hosztfájlok által letiltott DNS kérések száma", "number_of_dns_query_blocked_24_hours_by_sec": "Az AdGuard böngészési biztonság modulja által letiltott DNS kérések száma", "number_of_dns_query_blocked_24_hours_adult": "Blokkolt felnőtt tartalmak száma", diff --git a/client/src/__locales/id.json b/client/src/__locales/id.json index ebc6a1db..38ffba0a 100644 --- a/client/src/__locales/id.json +++ b/client/src/__locales/id.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Malware/phishing diblokir", "stats_adult": "Situs dewasa diblokir", "stats_query_domain": "Kueri domain teratas", - "for_last_24_hours": "untuk 24 jam terakhir", + "for_last_hours": "selama {{count}} jam terakhir", + "for_last_hours_plural": "selama {{count}} jam terakhir", "for_last_days": "untuk {{count}} hari terakhir", "for_last_days_plural": "selama {{count}} hari terakhir", "stats_disabled": "Statistik telah dinonaktifkan. Anda dapat mengaktifkannya dari <0>halaman setelan.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Tidak ada data server upstream yang ditemukan", "number_of_dns_query_days": "Jumlah kueri DNS diproses selama {{value}} hari terakhir", "number_of_dns_query_days_plural": "Jumlah kueri DNS yang diproses selama {{count}} hari terakhir", - "number_of_dns_query_24_hours": "Jumlah kueri DNS diproses selama 24 jam terakhir", + "number_of_dns_query_hours": "Jumlah kueri DNS diproses selama {{{count}} jam terakhir", + "number_of_dns_query_hours_plural": "Jumlah kueri DNS diproses selama {{count}} jam terakhir", "number_of_dns_query_blocked_24_hours": "Julah DNS diblokir oleh penyaring adblock dan daftar blokir hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Jumlah perminataan DNS diblokir oleh modul Kemanan Penjelajahan AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Jumlah website dewasa diblokir", diff --git a/client/src/__locales/it.json b/client/src/__locales/it.json index a6252e31..4748a82a 100644 --- a/client/src/__locales/it.json +++ b/client/src/__locales/it.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Malware/phishing bloccati", "stats_adult": "Siti per adulti bloccati", "stats_query_domain": "Domini maggiormente richiesti", - "for_last_24_hours": "nelle ultime 24 ore", + "for_last_hours": "per l'ultima {{count}} ora", + "for_last_hours_plural": "per le ultime {{count}} ore", "for_last_days": "per gli ultimi {{count}} giorni", "for_last_days_plural": "per gli ultimi {{count}} giorni", "stats_disabled": "Le statistiche sono state disattivate. Puoi attivarle dalla <0>pagina delle impostazioni.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nessun dato upstream trovato", "number_of_dns_query_days": "Numero di richieste DNS elaborate negli ultimi {{count}} giorni", "number_of_dns_query_days_plural": "Numero di richieste DNS elaborate negli ultimi {{count}} giorni", - "number_of_dns_query_24_hours": "Numero di richieste DNS elaborate nelle ultime 24 ore", + "number_of_dns_query_hours": "Numero di richieste DNS processate nell'ultima {{count}} ora", + "number_of_dns_query_hours_plural": "Numero di richieste DNS processate nelle ultime {{count}} ore", "number_of_dns_query_blocked_24_hours": "Numero di richieste DNS bloccate dai filtri per annunci e dagli elenchi di blocco host", "number_of_dns_query_blocked_24_hours_by_sec": "Numero di richieste DNS bloccate dal modulo sicurezza di navigazione di AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Numero di siti web per adulti bloccati", diff --git a/client/src/__locales/ja.json b/client/src/__locales/ja.json index bd0db3dd..f97b74db 100644 --- a/client/src/__locales/ja.json +++ b/client/src/__locales/ja.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "ブロックされたマルウェア/フィッシング", "stats_adult": "ブロックされたアダルトウェブサイト", "stats_query_domain": "最も問合せされたドメイン", - "for_last_24_hours": "過去24時間以内", + "for_last_hours": "過去{{count}}時間", + "for_last_hours_plural": "過去{{count}}時間", "for_last_days": "過去{{count}}日間以内", "for_last_days_plural": "過去{{count}}日間以内", "stats_disabled": "統計は無効化されています。<0>設定ページでオンにすることができます。", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "アップストリームのデータが見つかりません", "number_of_dns_query_days": "過去{{count}}日間に処理されたDNSクエリの数", "number_of_dns_query_days_plural": "過去{{count}}日間に処理されたDNSクエリの数", - "number_of_dns_query_24_hours": "過去24時間に処理されたDNSクエリの数", + "number_of_dns_query_hours": "過去{{count}}時間に処理されたDNSクエリの数", + "number_of_dns_query_hours_plural": "過去{{count}}時間に処理されたDNSクエリの数", "number_of_dns_query_blocked_24_hours": "広告ブロックフィルタとhostsブロックリストによってブロックされたDNSリクエストの数", "number_of_dns_query_blocked_24_hours_by_sec": "AdGuardブラウジングセキュリティモジュールによってブロックされたDNSリクエストの数", "number_of_dns_query_blocked_24_hours_adult": "ブロックされたアダルトウェブサイトの数", diff --git a/client/src/__locales/ko.json b/client/src/__locales/ko.json index 53f460d4..7a6b6e5d 100644 --- a/client/src/__locales/ko.json +++ b/client/src/__locales/ko.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "차단된 멀웨어/피싱", "stats_adult": "차단된 성인 웹사이트", "stats_query_domain": "쿼리 도메인", - "for_last_24_hours": "지난 24시간 동안", + "for_last_hours": "마지막 {{count}} 시간", + "for_last_hours_plural": "마지막 {{count}} 시간의 기록", "for_last_days": "마지막 {{count}} 일", "for_last_days_plural": "마지막 {{count}} 일의 기록", "stats_disabled": "통계 기능이 꺼졌습니다. <0>설정 페이지에서 켤 수 있습니다.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "업스트림 데이터 없음", "number_of_dns_query_days": "최근 {{count}}일 동안 처리된 DNS 쿼리의 수", "number_of_dns_query_days_plural": "최근 {{count}}일 동안 처리된 DNS 쿼리의 수", - "number_of_dns_query_24_hours": "최근 24시간 동안 처리된 DNS 쿼리의 수", + "number_of_dns_query_hours": "최근 {{count}}시간 동안 처리된 DNS 쿼리의 수", + "number_of_dns_query_hours_plural": "최근 {{count}}시간 동안 처리된 DNS 쿼리의 수", "number_of_dns_query_blocked_24_hours": "광고 차단 필터 및 호스트 차단 목록에 의해 차단된 DNS 요청 수", "number_of_dns_query_blocked_24_hours_by_sec": "AdGuard 브라우징 보안 모듈에 의해 차단된 DNS 요청 수", "number_of_dns_query_blocked_24_hours_adult": "차단된 성인 웹 사이트의 수", diff --git a/client/src/__locales/nl.json b/client/src/__locales/nl.json index e35d46cd..c243773e 100644 --- a/client/src/__locales/nl.json +++ b/client/src/__locales/nl.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Geblokkeerde malware/phishing", "stats_adult": "Geblokkeerde 18+ websites", "stats_query_domain": "Meest bezochte domeinen", - "for_last_24_hours": "van de laatste 24-uur", + "for_last_hours": "voor het afgelopen {{count}} uur", + "for_last_hours_plural": "voor de afgelopen {{count}} uren", "for_last_days": "sinds de laatste {{count}} dagen", "for_last_days_plural": "sinds de laatste {{count}} dagen", "stats_disabled": "Statistieken zijn uitgeschakeld. Je kunt ze inschakelen op de <0>instellingen pagina.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Geen upstreams-gegevens gevonden", "number_of_dns_query_days": "Aantal verwerkte DNS aanvragen van de laatste {{count}} dag", "number_of_dns_query_days_plural": "Aantal verwerkte DNS aanvragen van de laatste {{count}} dagen", - "number_of_dns_query_24_hours": "Aantal verwerkte DNS aanvragen van de laatste 24 uur", + "number_of_dns_query_hours": "Het aantal DNS-verzoeken dat het afgelopen {{count}} uur is verwerkt", + "number_of_dns_query_hours_plural": "Het aantal DNS-verzoeken dat de afgelopen {{count}} uren is verwerkt", "number_of_dns_query_blocked_24_hours": "Aantal geblokkeerde DNS aanvragen door advertentie blokkering en hosts blokkeerlijsten", "number_of_dns_query_blocked_24_hours_by_sec": "Aantal geblokkeerde DNS aanvragen door AdGuard browsing beveiligingsmodule", "number_of_dns_query_blocked_24_hours_adult": "Aantal geblokkeerde 18+ websites", diff --git a/client/src/__locales/pl.json b/client/src/__locales/pl.json index a02debe5..68f5802f 100644 --- a/client/src/__locales/pl.json +++ b/client/src/__locales/pl.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Zablokowane złośliwe oprogramowanie/phishing", "stats_adult": "Zablokowane witryny dla dorosłych", "stats_query_domain": "Najczęściej wyszukiwane domeny", - "for_last_24_hours": "przez ostatnie 24 godziny", + "for_last_hours": "w ciągu ostatniej {{count}} godziny", + "for_last_hours_plural": "w ciągu ostatnich {{count}} godzin", "for_last_days": "za ostatni dzień {{count}}", "for_last_days_plural": "z ostatnich {{count}} dni", "stats_disabled": "Statystyki zostały wyłączone. Można je włączyć na <0>stronie ustawień.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Brak danych dotyczących serwerów nadrzędnych", "number_of_dns_query_days": "Liczba przetworzonych zapytań DNS w ciągu ostatnich {{count}} dni", "number_of_dns_query_days_plural": "Liczba przetworzonych zapytań DNS w ciągu ostatnich {{count}} dni", - "number_of_dns_query_24_hours": "Liczba zapytań DNS przetworzonych w ciągu ostatnich 24 godzin", + "number_of_dns_query_hours": "Liczba przetworzonych zapytań DNS w ciągu ostatniej {{count}} godziny", + "number_of_dns_query_hours_plural": "Liczba przetworzonych zapytań DNS w ciągu ostatnich {{count}} godzin", "number_of_dns_query_blocked_24_hours": "Liczba żądań DNS zablokowanych przez filtry blokowania reklam i listy zablokowanych hostów", "number_of_dns_query_blocked_24_hours_by_sec": "Liczba żądań DNS zablokowanych przez moduł Bezpiecznego przeglądania AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Liczba zablokowanych witryn dla dorosłych", diff --git a/client/src/__locales/pt-br.json b/client/src/__locales/pt-br.json index b94842c0..28fd4529 100644 --- a/client/src/__locales/pt-br.json +++ b/client/src/__locales/pt-br.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Bloqueado malware/phishing", "stats_adult": "Bloqueado sites adultos", "stats_query_domain": "Principais domínios consultados", - "for_last_24_hours": "nas últimas 24 horas", + "for_last_hours": "na última {{count}} hora", + "for_last_hours_plural": "nas últimas {{count}} horas", "for_last_days": "nos últimos {{count}} dias", "for_last_days_plural": "nos últimos {{count}} dias", "stats_disabled": "As estatísticas foram desativadas. Você pode ligá-las através da <0>página de configurações.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nenhum dado de servidor DNS primário encontrado", "number_of_dns_query_days": "O número de consultas DNS processadas nos últimos {{count}} dias", "number_of_dns_query_days_plural": "Número de consultas DNS processadas nos últimos {{count}} dias", - "number_of_dns_query_24_hours": "O número de consultas DNS processadas nas últimas 24 horas", + "number_of_dns_query_hours": "Número de consultas DNS processadas durante a última {{count}} hora", + "number_of_dns_query_hours_plural": "Número de consultas DNS processadas durante as últimas {{count}} horas", "number_of_dns_query_blocked_24_hours": "Várias solicitações DNS bloqueadas por filtros de bloqueio de anúncios e listas de bloqueio de hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Várias solicitações de DNS bloqueadas pelo módulo de segurança da navegação do AdGuard", "number_of_dns_query_blocked_24_hours_adult": "O número de sites adultos bloqueados", @@ -689,7 +691,7 @@ "log_and_stats_section_label": "Registro de consultas e estatísticas", "ignore_query_log": "Ignorar este cliente no registo de consultas", "ignore_statistics": "Ignorar este cliente nas estatísticas", - "schedule_services": "Pausa o bloqueio de serviço", + "schedule_services": "Pausar bloqueio de serviço", "schedule_services_desc": "Configura o agendamento de pausa do filtro de bloqueio de serviço", "schedule_services_desc_client": "Configura o agendamento de pausa do filtro de bloqueio de serviço para este cliente", "schedule_desc": "Define períodos de inatividade para serviços bloqueados", diff --git a/client/src/__locales/pt-pt.json b/client/src/__locales/pt-pt.json index 5b37166c..c03d9b5c 100644 --- a/client/src/__locales/pt-pt.json +++ b/client/src/__locales/pt-pt.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Malware/phishing bloqueados", "stats_adult": "Sítios adultos bloqueados", "stats_query_domain": "Principais domínios consultados", - "for_last_24_hours": "nas últimas 24 horas", + "for_last_hours": "na última {{count}} hora", + "for_last_hours_plural": "nas últimas {{count}} horas", "for_last_days": "nos últimos {{count}} dias", "for_last_days_plural": "nos últimos {{count}} dias", "stats_disabled": "As estatísticas foram desativadas. Você pode ligá-las através da <0>página de definições.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nenhum dado de servidor DNS primário encontrado", "number_of_dns_query_days": "Número de consultas DNS processadas durante los últimos {{count}} días", "number_of_dns_query_days_plural": "Número de consultas DNS processadas durante os últimos {{count}} dias", - "number_of_dns_query_24_hours": "O número de consultas DNS processadas nas últimas 24 horas", + "number_of_dns_query_hours": "Número de consultas DNS processadas durante a última {{count}} hora", + "number_of_dns_query_hours_plural": "Número de consultas DNS processadas durante as últimas {{count}} horas", "number_of_dns_query_blocked_24_hours": "Várias solicitações DNS bloqueadas por filtros de bloqueio de anúncios e listas de bloqueio de hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Várias solicitações de DNS bloqueadas pelo módulo de segurança da navegação do AdGuard", "number_of_dns_query_blocked_24_hours_adult": "O número de sítios adultos bloqueados", diff --git a/client/src/__locales/ro.json b/client/src/__locales/ro.json index 16b725fb..0387e1af 100644 --- a/client/src/__locales/ro.json +++ b/client/src/__locales/ro.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Malware/phishing blocate", "stats_adult": "Site-uri cu conținut adult blocate", "stats_query_domain": "Domeniile cele mai căutate", - "for_last_24_hours": "în ultimele 24 ore", + "for_last_hours": "în ultima {{count}} oră", + "for_last_hours_plural": "în ultimele {{count}} ore", "for_last_days": "în ultima {{count}} zi", "for_last_days_plural": "pentru ultimele {{count}} zile", "stats_disabled": "Statisticile au fost dezactivate. Puteți să le porniți din <0>pagina de setări.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nu există date despre serverele din amonte", "number_of_dns_query_days": "Numărul de interogări DNS procesate în ultima {{count}} zi", "number_of_dns_query_days_plural": "Numărul de interogări DNS procesate în ultimele {{count}} zile", - "number_of_dns_query_24_hours": "Numărul de interogări DNS procesate în ultimele 24 de ore", + "number_of_dns_query_hours": "Numărul de interogări DNS procesate în ultima {{count}} oră", + "number_of_dns_query_hours_plural": "Numărul de interogări DNS procesate în ultimele {{count}} ore", "number_of_dns_query_blocked_24_hours": "Numărul de interogări DNS blocate de filtrele adblock și lista de blocări din hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Numărul de interogări DNS blocate de modulul de securitate de navigare AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Numărul de site-uri pentru adulți blocate", diff --git a/client/src/__locales/ru.json b/client/src/__locales/ru.json index ee50530f..8a5cbc9d 100644 --- a/client/src/__locales/ru.json +++ b/client/src/__locales/ru.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Заблокированные вредоносные и фишинговые сайты", "stats_adult": "Заблокированные «взрослые» сайты", "stats_query_domain": "Часто запрашиваемые домены", - "for_last_24_hours": "за 24 часа", + "for_last_hours": "за последний {{count}} час", + "for_last_hours_plural": "за последние {{count}} часов", "for_last_days": "за последний {{count}} день", "for_last_days_plural": "за последние {{count}} дней", "stats_disabled": "Статистика отключена. Вы можете включить её на <0>странице настроек.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Нет данных об upstream-серверах", "number_of_dns_query_days": "Количество DNS-запросов за последний {{count}} день", "number_of_dns_query_days_plural": "Количество DNS запросов, обработанных за последние {{count}} дней", - "number_of_dns_query_24_hours": "Количество DNS-запросов за последние 24 часа", + "number_of_dns_query_hours": "Количество DNS-запросов, обработанных за последний {{count}} час", + "number_of_dns_query_hours_plural": "Количество DNS-запросов, обработанных за последние {{count}} часов", "number_of_dns_query_blocked_24_hours": "Количество DNS-запросов, заблокированных фильтрами и блок-списками", "number_of_dns_query_blocked_24_hours_by_sec": "Количество DNS-запросов, заблокированных модулем Антифишинга AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Количество заблокированных «сайтов для взрослых»", diff --git a/client/src/__locales/sk.json b/client/src/__locales/sk.json index c7d55c3b..c3800be5 100644 --- a/client/src/__locales/sk.json +++ b/client/src/__locales/sk.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokovaný škodlivý kód/pokus o podvod", "stats_adult": "Blokovaná stránka pre dospelých", "stats_query_domain": "Najčastejšie dopytované domény", - "for_last_24_hours": "za posledných 24 hodín", + "for_last_hours": "za poslednú {{count}} hodinu", + "for_last_hours_plural": "za posledné {{count}} hodiny|za posledných {{count}} hodín", "for_last_days": "za posledný {{count}} deň", "for_last_days_plural": "za posledných {{count}} dní", "stats_disabled": "Štatistiky boli vypnuté. Môžete ich zapnúť na <0>stránke nastavení.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nenašli sa žiadne údaje o upstream serveroch", "number_of_dns_query_days": "Počet DNS dopytov spracovaných za posledný {{count}} deň", "number_of_dns_query_days_plural": "Počet DNS dopytov spracovaných za posledných {{count}} dní", - "number_of_dns_query_24_hours": "Počet DNS dopytov spracovaných za posledných 24 hodín", + "number_of_dns_query_hours": "Počet DNS dopytov spracovaných za poslednú {{count}} hodinu", + "number_of_dns_query_hours_plural": "Počet DNS dopytov spracovaných za posledné {{count}} hodiny)|Počet DNS dopytov spracovaných za posledných {{count}} hodín", "number_of_dns_query_blocked_24_hours": "Počet DNS dopytov zablokovaných filtrami reklamy a zoznamami blokovaných hostov", "number_of_dns_query_blocked_24_hours_by_sec": "Počet DNS dopytov zablokovaných AdGuard modulom Bezpečné prehliadanie", "number_of_dns_query_blocked_24_hours_adult": "Počet zablokovaných stránok pre dospelých", diff --git a/client/src/__locales/sl.json b/client/src/__locales/sl.json index 1603bf1a..1d25aefb 100644 --- a/client/src/__locales/sl.json +++ b/client/src/__locales/sl.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Onemogočeno zlonamernih programov/lažnih predstavljanj", "stats_adult": "Onemogočeno spletnih strani za odrasle", "stats_query_domain": "Najbolj poizvedovane domene", - "for_last_24_hours": "v zadnjih 24 urah", + "for_last_hours": "za zadnjo {{count}} uro", + "for_last_hours_plural": "za zadnjih {{count}} ur", "for_last_days": "zadnjega {{count}} dne", "for_last_days_plural": "zadnjih {{count}} dni", "stats_disabled": "Statistika je onemogočena. Vklopite ga lahko na <0>strani z nastavitvami.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Ni podatkov o gorvodnih strežnikih", "number_of_dns_query_days": "Število obdelanih poizvedb DNS v zadnjem {{count}} dnevu", "number_of_dns_query_days_plural": "Število obdelanih poizvedb DNS v zadnjih {{count}} dneh", - "number_of_dns_query_24_hours": "Število obdelanih poizvedb DNS v zadnjih 24 urah", + "number_of_dns_query_hours": "Število poizvedb DNS, obdelanih v zadnji {{count}} uri", + "number_of_dns_query_hours_plural": "Število poizvedb DNS, obdelanih v zadnjih {{count}} urah", "number_of_dns_query_blocked_24_hours": "Število zahtev DNS, ki so jih onemogočili filtri za zaviranje oglasov in seznami nedovoljenih, gostiteljev", "number_of_dns_query_blocked_24_hours_by_sec": "Število zahtev DNS, ki jih je blokiral AdGuard zaščitni modul brskanja", "number_of_dns_query_blocked_24_hours_adult": "Število onemogočenih spletnih strani za odrasle", diff --git a/client/src/__locales/sr-cs.json b/client/src/__locales/sr-cs.json index bcb0d237..4406104e 100644 --- a/client/src/__locales/sr-cs.json +++ b/client/src/__locales/sr-cs.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blokiraj štetan softver i fišing", "stats_adult": "Blokiraj sajtove za odrasle", "stats_query_domain": "Najčešće unošeni domeni", - "for_last_24_hours": "u poslednja 24 časa", + "for_last_hours": "u poslednjih {{count}} sat", + "for_last_hours_plural": "u poslednjih {{count}} sati", "for_last_days": "u poslednjih {{count}} dana", "for_last_days_plural": "u poslednjih {{count}} dana", "stats_disabled": "Statistika je isključena. Možete ga uključiti sa stranice <0>sa postavkama.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Nema podataka o upstream serverima", "number_of_dns_query_days": "Broj obrađenih DNS unosa u poslednjih {{count}} dan", "number_of_dns_query_days_plural": "Broj obrađenih DNS unosa u poslednjih {{count}} dana", - "number_of_dns_query_24_hours": "Broj obrađenih DNS unosa u poslednja 24 časa", + "number_of_dns_query_hours": "Broj obrađenih DNS unosa u poslednji {{count}} sat", + "number_of_dns_query_hours_plural": "Broj obrađenih DNS unosa u poslednjih {{count}} sati", "number_of_dns_query_blocked_24_hours": "Broj DNS zahteva blokiranih od filtera blokatora reklama i blok liste hostova", "number_of_dns_query_blocked_24_hours_by_sec": "Broj DNS zahteva blokiranih od AdGuard-ovog podprograma za bezbedno pregledanje", "number_of_dns_query_blocked_24_hours_adult": "Broj blokiranih sajtova za odrasle", diff --git a/client/src/__locales/sv.json b/client/src/__locales/sv.json index 10f8cf9b..90834a8a 100644 --- a/client/src/__locales/sv.json +++ b/client/src/__locales/sv.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Blockerad skadekod/phishing", "stats_adult": "Blockerade vuxensajter", "stats_query_domain": "Mest eftersökta domäner", - "for_last_24_hours": "under de senaste 24 timmarna", + "for_last_hours": "för den senaste {{count}} timme", + "for_last_hours_plural": "för de senaste {{count}} timmar", "for_last_days": "för den senaste {{count}} dagen", "for_last_days_plural": "för de senaste {{count}} dagarna", "stats_disabled": "Statistiken har inaktiverats. Du kan aktivera det från <0>inställningssidan.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Inga uppströmsdata hittades", "number_of_dns_query_days": "Antalet DNS-förfrågningar som utfördes under senaste {{count}} dagen", "number_of_dns_query_days_plural": "Ett antal DNS förfrågningar utfördes under de senaste {{count}} dagarna", - "number_of_dns_query_24_hours": "Antalet DNS-förfrågningar som utfördes under de senaste 24 timmarna", + "number_of_dns_query_hours": "Ett antal DNS förfrågningar utfördes för den senaste {{count}} timme", + "number_of_dns_query_hours_plural": "Ett antal DNS förfrågningar utfördes för den senaste {{count}} timmar", "number_of_dns_query_blocked_24_hours": "Antalet DNS-förfrågningar som blockerades av annonsfilter och värdens blockeringsklistor", "number_of_dns_query_blocked_24_hours_by_sec": "Antalet DNS-förfrågningar som blockerades av AdGuards modul för surfsäkerhet", "number_of_dns_query_blocked_24_hours_adult": "Antalet vuxensajter som blockerats", diff --git a/client/src/__locales/tr.json b/client/src/__locales/tr.json index a103b0fa..64f61bed 100644 --- a/client/src/__locales/tr.json +++ b/client/src/__locales/tr.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Engellenen kötü amaçlı yazılım ve kimlik avı", "stats_adult": "Engellenen yetişkin içerikli siteler", "stats_query_domain": "Başlıca sorgulanan alan adları", - "for_last_24_hours": "son 24 saat içindekiler", + "for_last_hours": "son {{count}} saat için", + "for_last_hours_plural": "son {{count}} saat için", "for_last_days": "son {{count}} gün boyunca", "for_last_days_plural": "son {{count}} gün boyunca", "stats_disabled": "İstatistikler devre dışı bırakıldı. Bunu, <0>ayarlar sayfasından etkinleştirebilirsiniz.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Üst kaynak verisi bulunamadı", "number_of_dns_query_days": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı", "number_of_dns_query_days_plural": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı", - "number_of_dns_query_24_hours": "Son 24 saat içinde işlenen DNS sorgularının sayısı", + "number_of_dns_query_hours": "Son {{count}} saat için işlenen DNS sorgularının sayısı", + "number_of_dns_query_hours_plural": "Son {{count}} saatiçin işlenen DNS sorgularının sayısı", "number_of_dns_query_blocked_24_hours": "Reklam engelleme filtreleri ve hosts engel listeleri tarafından engellenen DNS isteklerinin sayısı", "number_of_dns_query_blocked_24_hours_by_sec": "AdGuard gezinti koruması modülü tarafından engellenen DNS isteklerinin sayısı", "number_of_dns_query_blocked_24_hours_adult": "Engellenen yetişkin içerikli sitelerin sayısı", diff --git a/client/src/__locales/uk.json b/client/src/__locales/uk.json index 31e54eae..5817278b 100644 --- a/client/src/__locales/uk.json +++ b/client/src/__locales/uk.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Заблоковано зловмисних/шахрайських програм", "stats_adult": "Заблоковано вебсайтів для дорослих", "stats_query_domain": "Найчастіші запити доменів", - "for_last_24_hours": "за останні 24 години", + "for_last_hours": "за останню {{count}} годину", + "for_last_hours_plural": "за останні {{count}} годин", "for_last_days": "за останній {{count}} день", "for_last_days_plural": "за останні {{count}} днів", "stats_disabled": "Статистику вимкнено. Ви можете увімкнути її на <0>сторінці налаштувань.", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Немає даних про upstream-сервери", "number_of_dns_query_days": "Кількість DNS-запитів, оброблених за останні {{count}} дні", "number_of_dns_query_days_plural": "Кількість DNS-запитів, оброблених за останні {{count}} днів", - "number_of_dns_query_24_hours": "Кількість DNS-запитів, оброблених за останні 24 години", + "number_of_dns_query_hours": "Кількість DNS-запитів, оброблених за останню {{count}} годину", + "number_of_dns_query_hours_plural": "Кількість DNS-запитів, оброблених за останні {{count}} годин", "number_of_dns_query_blocked_24_hours": "Кількість DNS-запитів, заблокованих фільтрами і списками блокування hosts", "number_of_dns_query_blocked_24_hours_by_sec": "Кількість DNS-запитів, заблокованих модулем «Безпека перегляду» AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Кількість заблокованих вебсайтів для дорослих", diff --git a/client/src/__locales/vi.json b/client/src/__locales/vi.json index f0090aa6..66d69538 100644 --- a/client/src/__locales/vi.json +++ b/client/src/__locales/vi.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "Mã độc/lừa đảo đã chặn", "stats_adult": "Website người lớn đã chặn", "stats_query_domain": "Tên miền truy vấn nhiều", - "for_last_24_hours": "trong 24 giờ qua", + "for_last_hours": "trong {{count}} giờ qua", + "for_last_hours_plural": "trong {{count}} giờ qua", "for_last_days": "trong {{count}} ngày qua", "for_last_days_plural": "trong {{count}} ngày qua", "stats_disabled": "Số liệu thống kê đã bị vô hiệu hóa. Bạn có thể bật nó từ <0> trang cài đặt .", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "Không tìm thấy dữ liệu máy chủ ngược dòng", "number_of_dns_query_days": "Một số truy vấn DNS được xử lý trong {{count}} ngày qua", "number_of_dns_query_days_plural": "Một số truy vấn DNS được xử lý trong {{count}} ngày qua", - "number_of_dns_query_24_hours": "Số yêu cầu DNS đã xử lý trong 24 giờ qua", + "number_of_dns_query_hours": "Một số truy vấn DNS được xử lý trong {{count}} giờ qua", + "number_of_dns_query_hours_plural": "Một số truy vấn DNS được xử lý trong {{count}} giờ qua", "number_of_dns_query_blocked_24_hours": "Số yêu cầu DNS bị chặn bởi bộ lọc quảng cáo và danh sách chặn host", "number_of_dns_query_blocked_24_hours_by_sec": "Số yêu cầu DNS bị chặn bởi chế độ bảo vệ duyệt web AdGuard", "number_of_dns_query_blocked_24_hours_adult": "Số trang web người lớn đã chặn", diff --git a/client/src/__locales/zh-cn.json b/client/src/__locales/zh-cn.json index ad2aebac..825ad7d2 100644 --- a/client/src/__locales/zh-cn.json +++ b/client/src/__locales/zh-cn.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "被拦截的恶意/钓鱼网站", "stats_adult": "被拦截的成人网站", "stats_query_domain": "请求域名排行", - "for_last_24_hours": "在过去 24 小时", + "for_last_hours": "最近 {{count}} 小时", + "for_last_hours_plural": "最近 {{count}} 小时", "for_last_days": "最近 {{count}} 天", "for_last_days_plural": "最近 {{count}} 天", "stats_disabled": "已禁用统计数据。您可以从<0>设置页面打开它。", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "未找到上游服务器数据", "number_of_dns_query_days": "过去 {{count}} 天内处理的 DNS 查询总数", "number_of_dns_query_days_plural": "在过去的 {{count}} 天内处理了多少个 DNS 查询", - "number_of_dns_query_24_hours": "过去 24 小时内处理的 DNS 请求总数", + "number_of_dns_query_hours": "最近 {{count}} 小时内处理的 DNS 查询次数", + "number_of_dns_query_hours_plural": "最近 {{count}} 小时内处理的 DNS 查询次数", "number_of_dns_query_blocked_24_hours": "被广告过滤器和 Hosts 黑名单阻止的 DNS 请求总数", "number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 安全浏览模块阻止的 DNS 请求总数", "number_of_dns_query_blocked_24_hours_adult": "被阻止的成人网站总数", diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json index 0cbd148a..5e7ccb40 100644 --- a/client/src/__locales/zh-tw.json +++ b/client/src/__locales/zh-tw.json @@ -119,7 +119,8 @@ "stats_malware_phishing": "已封鎖的惡意軟體/網路釣魚", "stats_adult": "已封鎖的成人網站", "stats_query_domain": "熱門已查詢的網域", - "for_last_24_hours": "在最近的 24 小時內", + "for_last_hours": "在過去的 {{count}} 小時內", + "for_last_hours_plural": "在過去的 {{count}} 小時內", "for_last_days": "在最近的 {{count}} 日內", "for_last_days_plural": "在最近的 {{count}} 日內", "stats_disabled": "該統計資料已被禁用。您可從<0>設定頁面中打開它。", @@ -134,7 +135,8 @@ "no_upstreams_data_found": "找不到上游伺服器資料", "number_of_dns_query_days": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量", "number_of_dns_query_days_plural": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量", - "number_of_dns_query_24_hours": "在最近的 24 小時內已處理的 DNS 查詢之數量", + "number_of_dns_query_hours": "過去 {{count}} 小時內處理的 DNS 查詢次數", + "number_of_dns_query_hours_plural": "過去 {{count}} 小時內處理的 DNS 查詢次數", "number_of_dns_query_blocked_24_hours": "被廣告封鎖過濾器和主機封鎖清單阻擋的 DNS 請求之數量", "number_of_dns_query_blocked_24_hours_by_sec": "被 AdGuard 瀏覽安全模組封鎖的 DNS 請求之數量", "number_of_dns_query_blocked_24_hours_adult": "已封鎖的成人網站之數量", diff --git a/client/src/components/App/index.css b/client/src/components/App/index.css index 78bd0096..91cd1749 100644 --- a/client/src/components/App/index.css +++ b/client/src/components/App/index.css @@ -134,15 +134,6 @@ body { cursor: not-allowed; } -.button-action { - visibility: hidden; -} - -.logs__row:hover .button-action, -.button-action--active { - visibility: visible; -} - .ReactModal__Body--open { overflow: hidden; } diff --git a/client/src/components/Dashboard/BlockedDomains.js b/client/src/components/Dashboard/BlockedDomains.js index 73829a1b..225234f6 100644 --- a/client/src/components/Dashboard/BlockedDomains.js +++ b/client/src/components/Dashboard/BlockedDomains.js @@ -8,7 +8,7 @@ import Cell from '../ui/Cell'; import DomainCell from './DomainCell'; import { getPercent } from '../../helpers/helpers'; -import { STATUS_COLORS } from '../../helpers/constants'; +import { DASHBOARD_TABLES_DEFAULT_PAGE_SIZE, STATUS_COLORS, TABLES_MIN_ROWS } from '../../helpers/constants'; const CountCell = (totalBlocked) => function cell(row) { const { value } = row; @@ -62,8 +62,8 @@ const BlockedDomains = ({ ]} showPagination={false} noDataText={t('no_domains_found')} - minRows={6} - defaultPageSize={100} + minRows={TABLES_MIN_ROWS} + defaultPageSize={DASHBOARD_TABLES_DEFAULT_PAGE_SIZE} className="-highlight card-table-overflow--limited stats__table" /> diff --git a/client/src/components/Dashboard/Clients.js b/client/src/components/Dashboard/Clients.js index 76cf998a..50242297 100644 --- a/client/src/components/Dashboard/Clients.js +++ b/client/src/components/Dashboard/Clients.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import ReactTable from 'react-table'; import PropTypes from 'prop-types'; import { Trans, useTranslation } from 'react-i18next'; @@ -9,10 +9,16 @@ import Card from '../ui/Card'; import Cell from '../ui/Cell'; import { getPercent, sortIp } from '../../helpers/helpers'; -import { BLOCK_ACTIONS, STATUS_COLORS } from '../../helpers/constants'; +import { + BLOCK_ACTIONS, + DASHBOARD_TABLES_DEFAULT_PAGE_SIZE, + STATUS_COLORS, + TABLES_MIN_ROWS, +} from '../../helpers/constants'; import { toggleClientBlock } from '../../actions/access'; import { renderFormattedClientCell } from '../../helpers/renderFormattedClientCell'; import { getStats } from '../../actions/stats'; +import IconTooltip from '../Logs/Cells/IconTooltip'; const getClientsPercentColor = (percent) => { if (percent > 50) { @@ -40,9 +46,7 @@ const renderBlockingButton = (ip, disallowed, disallowed_rule) => { const processingSet = useSelector((state) => state.access.processingSet); const allowedСlients = useSelector((state) => state.access.allowed_clients, shallowEqual); - const buttonClass = classNames('button-action button-action--main', { - 'button-action--unblock': disallowed, - }); + const [isOptionsOpened, setOptionsOpened] = useState(false); const toggleClientStatus = async (ip, disallowed, disallowed_rule) => { let confirmMessage; @@ -62,23 +66,49 @@ const renderBlockingButton = (ip, disallowed, disallowed_rule) => { } }; - const onClick = () => toggleClientStatus(ip, disallowed, disallowed_rule); + const onClick = () => { + toggleClientStatus(ip, disallowed, disallowed_rule); + setOptionsOpened(false); + }; const text = disallowed ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK; const lastRuleInAllowlist = !disallowed && allowedСlients === disallowed_rule; const disabled = processingSet || lastRuleInAllowlist; return ( -
+
+ {isOptionsOpened && ( + + {text} + + )} + placement="bottom-end" + trigger="click" + onVisibilityChange={setOptionsOpened} + defaultTooltipShown={true} + delayHide={0} + /> + )}
); }; @@ -134,8 +164,8 @@ const Clients = ({ ]} showPagination={false} noDataText={t('no_clients_found')} - minRows={6} - defaultPageSize={100} + minRows={TABLES_MIN_ROWS} + defaultPageSize={DASHBOARD_TABLES_DEFAULT_PAGE_SIZE} className="-highlight card-table-overflow--limited clients__table" getTrProps={(_state, rowInfo) => { if (!rowInfo) { diff --git a/client/src/components/Dashboard/Counters.js b/client/src/components/Dashboard/Counters.js index 69702c32..2a27c9c4 100644 --- a/client/src/components/Dashboard/Counters.js +++ b/client/src/components/Dashboard/Counters.js @@ -4,9 +4,9 @@ import { Trans, useTranslation } from 'react-i18next'; import round from 'lodash/round'; import { shallowEqual, useSelector } from 'react-redux'; import Card from '../ui/Card'; -import { formatNumber } from '../../helpers/helpers'; +import { formatNumber, msToDays, msToHours } from '../../helpers/helpers'; import LogsSearchLink from '../ui/LogsSearchLink'; -import { RESPONSE_FILTER, DAY } from '../../helpers/constants'; +import { RESPONSE_FILTER, TIME_UNITS } from '../../helpers/constants'; import Tooltip from '../ui/Tooltip'; const Row = ({ @@ -52,14 +52,19 @@ const Counters = ({ refreshButton, subtitle }) => { numReplacedParental, numReplacedSafesearch, avgProcessingTime, + timeUnits, } = useSelector((state) => state.stats, shallowEqual); const { t } = useTranslation(); - const days = interval / DAY; + + const dnsQueryTooltip = timeUnits === TIME_UNITS.HOURS + ? t('number_of_dns_query_hours', { count: msToHours(interval) }) + : t('number_of_dns_query_days', { count: msToDays(interval) }); + const rows = [ { label: 'dns_query', count: numDnsQueries, - tooltipTitle: days === 1 ? 'number_of_dns_query_24_hours' : t('number_of_dns_query_days', { count: days }), + tooltipTitle: dnsQueryTooltip, response_status: RESPONSE_FILTER.ALL.QUERY, }, { diff --git a/client/src/components/Dashboard/Dashboard.css b/client/src/components/Dashboard/Dashboard.css index 765c9ed1..3f794a1a 100644 --- a/client/src/components/Dashboard/Dashboard.css +++ b/client/src/components/Dashboard/Dashboard.css @@ -28,11 +28,14 @@ border-bottom: 6px solid #585965; } -@media (max-width: 1279.98px) { - .table__action { - position: absolute; - right: 0; - } +.table__action { + position: relative; + margin-left: auto; +} + +.table__action .btn-icon { + outline: 0; + box-shadow: none; } .page-title--dashboard { diff --git a/client/src/components/Dashboard/QueriedDomains.js b/client/src/components/Dashboard/QueriedDomains.js index debc4fe7..5308c872 100644 --- a/client/src/components/Dashboard/QueriedDomains.js +++ b/client/src/components/Dashboard/QueriedDomains.js @@ -7,7 +7,7 @@ import Card from '../ui/Card'; import Cell from '../ui/Cell'; import DomainCell from './DomainCell'; -import { STATUS_COLORS } from '../../helpers/constants'; +import { DASHBOARD_TABLES_DEFAULT_PAGE_SIZE, STATUS_COLORS, TABLES_MIN_ROWS } from '../../helpers/constants'; import { getPercent } from '../../helpers/helpers'; const getQueriedPercentColor = (percent) => { @@ -58,8 +58,8 @@ const QueriedDomains = ({ ]} showPagination={false} noDataText={t('no_domains_found')} - minRows={6} - defaultPageSize={100} + minRows={TABLES_MIN_ROWS} + defaultPageSize={DASHBOARD_TABLES_DEFAULT_PAGE_SIZE} className="-highlight card-table-overflow--limited stats__table" /> diff --git a/client/src/components/Dashboard/UpstreamAvgTime.js b/client/src/components/Dashboard/UpstreamAvgTime.js index f56b5165..eb198189 100644 --- a/client/src/components/Dashboard/UpstreamAvgTime.js +++ b/client/src/components/Dashboard/UpstreamAvgTime.js @@ -6,6 +6,7 @@ import { withTranslation, Trans } from 'react-i18next'; import Card from '../ui/Card'; import DomainCell from './DomainCell'; +import { DASHBOARD_TABLES_DEFAULT_PAGE_SIZE, TABLES_MIN_ROWS } from '../../helpers/constants'; const TimeCell = ({ value }) => { if (!value) { @@ -62,8 +63,8 @@ const UpstreamAvgTime = ({ ]} showPagination={false} noDataText={t('no_upstreams_data_found')} - minRows={6} - defaultPageSize={100} + minRows={TABLES_MIN_ROWS} + defaultPageSize={DASHBOARD_TABLES_DEFAULT_PAGE_SIZE} className="-highlight card-table-overflow--limited stats__table" /> diff --git a/client/src/components/Dashboard/UpstreamResponses.js b/client/src/components/Dashboard/UpstreamResponses.js index 658d7de8..e6cf619f 100644 --- a/client/src/components/Dashboard/UpstreamResponses.js +++ b/client/src/components/Dashboard/UpstreamResponses.js @@ -8,7 +8,7 @@ import Cell from '../ui/Cell'; import DomainCell from './DomainCell'; import { getPercent } from '../../helpers/helpers'; -import { STATUS_COLORS } from '../../helpers/constants'; +import { DASHBOARD_TABLES_DEFAULT_PAGE_SIZE, STATUS_COLORS, TABLES_MIN_ROWS } from '../../helpers/constants'; const CountCell = (totalBlocked) => ( function cell(row) { @@ -64,8 +64,8 @@ const UpstreamResponses = ({ ]} showPagination={false} noDataText={t('no_upstreams_data_found')} - minRows={6} - defaultPageSize={100} + minRows={TABLES_MIN_ROWS} + defaultPageSize={DASHBOARD_TABLES_DEFAULT_PAGE_SIZE} className="-highlight card-table-overflow--limited stats__table" /> diff --git a/client/src/components/Dashboard/index.js b/client/src/components/Dashboard/index.js index c0c88a0e..f4a780a7 100644 --- a/client/src/components/Dashboard/index.js +++ b/client/src/components/Dashboard/index.js @@ -9,7 +9,12 @@ import Counters from './Counters'; import Clients from './Clients'; import QueriedDomains from './QueriedDomains'; import BlockedDomains from './BlockedDomains'; -import { DISABLE_PROTECTION_TIMINGS, ONE_SECOND_IN_MS, SETTINGS_URLS } from '../../helpers/constants'; +import { + DISABLE_PROTECTION_TIMINGS, + ONE_SECOND_IN_MS, + SETTINGS_URLS, + TIME_UNITS, +} from '../../helpers/constants'; import { msToSeconds, msToMinutes, @@ -46,15 +51,12 @@ const Dashboard = ({ getAllStats(); }, []); const getSubtitle = () => { - const ONE_DAY = 1; - const intervalInDays = msToDays(stats.interval); - - if (intervalInDays < ONE_DAY) { + if (!stats.enabled) { return t('stats_disabled_short'); } - return intervalInDays === ONE_DAY - ? t('for_last_24_hours') + return stats.timeUnits === TIME_UNITS.HOURS + ? t('for_last_hours', { count: msToHours(stats.interval) }) : t('for_last_days', { count: msToDays(stats.interval) }); }; diff --git a/client/src/components/Filters/Rewrites/Table.js b/client/src/components/Filters/Rewrites/Table.js index 667f0e51..5b9ea3de 100644 --- a/client/src/components/Filters/Rewrites/Table.js +++ b/client/src/components/Filters/Rewrites/Table.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import ReactTable from 'react-table'; import { withTranslation } from 'react-i18next'; import { sortIp } from '../../../helpers/helpers'; -import { MODAL_TYPE } from '../../../helpers/constants'; +import { MODAL_TYPE, TABLES_MIN_ROWS } from '../../../helpers/constants'; import { LocalStorageHelper, LOCAL_STORAGE_KEYS } from '../../../helpers/localStorageHelper'; class Table extends Component { @@ -88,7 +88,7 @@ class Table extends Component { showPagination defaultPageSize={LocalStorageHelper.getItem(LOCAL_STORAGE_KEYS.REWRITES_PAGE_SIZE) || 10} onPageSizeChange={(size) => LocalStorageHelper.setItem(LOCAL_STORAGE_KEYS.REWRITES_PAGE_SIZE, size)} - minRows={5} + minRows={TABLES_MIN_ROWS} ofText="/" previousText={t('previous_btn')} nextText={t('next_btn')} diff --git a/client/src/components/Logs/Cells/ClientCell.js b/client/src/components/Logs/Cells/ClientCell.js index 3590df48..d0dd3168 100644 --- a/client/src/components/Logs/Cells/ClientCell.js +++ b/client/src/components/Logs/Cells/ClientCell.js @@ -26,9 +26,7 @@ const ClientCell = ({ const { t } = useTranslation(); const dispatch = useDispatch(); const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual); - const processingRules = useSelector((state) => state.filtering.processingRules); const isDetailed = useSelector((state) => state.queryLogs.isDetailed); - const processingSet = useSelector((state) => state.access.processingSet); const allowedСlients = useSelector((state) => state.access.allowed_clients, shallowEqual); const [isOptionsOpened, setOptionsOpened] = useState(false); @@ -84,11 +82,23 @@ const ClientCell = ({ const blockingForClientKey = isFiltered ? 'unblock_for_this_client_only' : 'block_for_this_client_only'; const clientNameBlockingFor = getBlockingClientName(clients, client); + const onClick = async () => { + await dispatch(toggleBlocking(buttonType, domain)); + await dispatch(getStats()); + setOptionsOpened(false); + }; + const BUTTON_OPTIONS = [ + { + name: buttonType, + onClick, + className: isFiltered ? 'bg--green' : 'bg--danger', + }, { name: blockingForClientKey, onClick: () => { dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor)); + setOptionsOpened(false); }, }, { @@ -101,27 +111,25 @@ const ClientCell = ({ client_info?.disallowed_rule || '', )); await dispatch(updateLogs()); + setOptionsOpened(false); } }, - disabled: processingSet || lastRuleInAllowlist, + disabled: lastRuleInAllowlist, }, ]; - const onClick = async () => { - await dispatch(toggleBlocking(buttonType, domain)); - await dispatch(getStats()); - }; - const getOptions = (options) => { if (options.length === 0) { return null; } return ( <> - {options.map(({ name, onClick, disabled }) => ( + {options.map(({ + name, onClick, disabled, className, + }) => ( - {content && ( - + {isOptionsOpened && ( + )}
); @@ -198,7 +196,7 @@ const ClientCell = ({ {isDetailed && clientName && !whoisAvailable && ( diff --git a/client/src/components/Logs/Cells/IconTooltip.css b/client/src/components/Logs/Cells/IconTooltip.css index 0b55ee6a..bbaf1604 100644 --- a/client/src/components/Logs/Cells/IconTooltip.css +++ b/client/src/components/Logs/Cells/IconTooltip.css @@ -1,4 +1,5 @@ .tooltip-custom__container { + min-width: 150px; padding: 1rem 1.5rem 1.25rem 1.5rem; font-size: 16px !important; box-shadow: 2px 4px 8px rgba(0, 0, 0, 0.2); diff --git a/client/src/components/Logs/Cells/IconTooltip.js b/client/src/components/Logs/Cells/IconTooltip.js index 8bb3d624..304aded8 100644 --- a/client/src/components/Logs/Cells/IconTooltip.js +++ b/client/src/components/Logs/Cells/IconTooltip.js @@ -21,6 +21,8 @@ const IconTooltip = ({ content, trigger, onVisibilityChange, + defaultTooltipShown, + delayHide, renderContent = content ? React.Children.map( processContent(content), (item, idx) =>
@@ -44,6 +46,8 @@ const IconTooltip = ({ trigger={trigger} onVisibilityChange={onVisibilityChange} delayShow={trigger === 'click' ? 0 : SHOW_TOOLTIP_DELAY} + delayHide={delayHide} + defaultTooltipShown={defaultTooltipShown} > {xlinkHref && @@ -65,6 +69,8 @@ IconTooltip.propTypes = { content: PropTypes.node, renderContent: PropTypes.arrayOf(PropTypes.element), onVisibilityChange: PropTypes.func, + defaultTooltipShown: PropTypes.bool, + delayHide: PropTypes.number, }; export default IconTooltip; diff --git a/client/src/components/Logs/Logs.css b/client/src/components/Logs/Logs.css index 762dfa50..4935192a 100644 --- a/client/src/components/Logs/Logs.css +++ b/client/src/components/Logs/Logs.css @@ -80,6 +80,10 @@ color: var(--gray-f3); } +.logs__text--client { + padding-right: 32px; +} + .icon--selected { background-color: var(--gray-f3); border: solid 1px var(--gray-d8); @@ -261,9 +265,8 @@ .button-action__container { display: flex; position: absolute; - right: 0; + right: 2px; bottom: 0.5rem; - height: 1.6rem; } @media screen and (max-width: 1024px) { @@ -307,45 +310,10 @@ border-bottom-right-radius: 0; } -.button-action--arrow { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-left: 1px solid var(--white); - width: 1.5625rem; - padding: 0; - display: flex; - align-items: center; - justify-content: center; -} - .button-action:hover { cursor: pointer; } -.button-action--arrow .button-action--icon { - width: 100%; - height: 100%; - display: flex; - justify-content: center; -} - -.button-action:active { - background: var(--btn-block-active); -} - -.button-action--unblock:active { - background: var(--btn-unblock-active); -} - -.button-action:disabled { - background: var(--btn-block-disabled); - cursor: default; -} - -.button-action--unblock:disabled { - background: var(--btn-unblock-disabled); -} - .button-action--arrow-option { background: transparent; border: 0; @@ -551,3 +519,20 @@ padding: 1rem 1.5rem; background-color: var(--card-bgcolor); } + +.button-action__hidden-trigger { + position: absolute; + top: 0; + right: 0; + width: 1px; + height: 33px; + margin: -1px; + padding: 0; + overflow: hidden; + border: 0; + clip: rect(0 0 0 0); +} + +[data-theme="dark"] .button-action__icon { + color: var(--gray-f3); +} diff --git a/client/src/components/Settings/Clients/AutoClients.js b/client/src/components/Settings/Clients/AutoClients.js index 192af1f6..165c756b 100644 --- a/client/src/components/Settings/Clients/AutoClients.js +++ b/client/src/components/Settings/Clients/AutoClients.js @@ -10,6 +10,7 @@ import whoisCell from './whoisCell'; import LogsSearchLink from '../../ui/LogsSearchLink'; import { sortIp } from '../../../helpers/helpers'; import { LocalStorageHelper, LOCAL_STORAGE_KEYS } from '../../../helpers/localStorageHelper'; +import { TABLES_MIN_ROWS } from '../../../helpers/constants'; const COLUMN_MIN_WIDTH = 200; @@ -90,7 +91,7 @@ class AutoClients extends Component { onPageSizeChange={(size) => ( LocalStorageHelper.setItem(LOCAL_STORAGE_KEYS.AUTO_CLIENTS_PAGE_SIZE, size) )} - minRows={5} + minRows={TABLES_MIN_ROWS} ofText="/" previousText={t('previous_btn')} nextText={t('next_btn')} diff --git a/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js b/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js index 19f57616..9f65986f 100644 --- a/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js +++ b/client/src/components/Settings/Clients/ClientsTable/ClientsTable.js @@ -14,7 +14,7 @@ import { sortIp, getService, } from '../../../../helpers/helpers'; -import { MODAL_TYPE, LOCAL_TIMEZONE_VALUE } from '../../../../helpers/constants'; +import { MODAL_TYPE, LOCAL_TIMEZONE_VALUE, TABLES_MIN_ROWS } from '../../../../helpers/constants'; import Card from '../../../ui/Card'; import CellWrap from '../../../ui/CellWrap'; import LogsSearchLink from '../../../ui/LogsSearchLink'; @@ -347,7 +347,7 @@ const ClientsTable = ({ onPageSizeChange={(size) => ( LocalStorageHelper.setItem(LOCAL_STORAGE_KEYS.CLIENTS_PAGE_SIZE, size) )} - minRows={5} + minRows={TABLES_MIN_ROWS} ofText="/" previousText={t('previous_btn')} nextText={t('next_btn')} diff --git a/client/src/components/ui/Card.css b/client/src/components/ui/Card.css index 9e649264..6f5e31ab 100644 --- a/client/src/components/ui/Card.css +++ b/client/src/components/ui/Card.css @@ -2,6 +2,7 @@ align-items: center; justify-content: space-between; padding: 0.6rem 1.5rem; + flex-shrink: 0; } .card-subtitle { @@ -19,8 +20,16 @@ max-height: 17.5rem; } +.dashboard .card-table { + overflow: hidden; +} + .dashboard .card-table-overflow--limited { - max-height: 18rem; + max-height: 292px; +} + +.dashboard .ReactTable .rt-tr-group { + min-height: 52px; } .card-actions { @@ -125,7 +134,7 @@ @media (min-width: 992px) { .dashboard .card:not(.card--full) { - height: 22rem; + height: 360px; } } diff --git a/client/src/components/ui/Icons.js b/client/src/components/ui/Icons.js index 288eadfc..af5ca52c 100644 --- a/client/src/components/ui/Icons.js +++ b/client/src/components/ui/Icons.js @@ -239,6 +239,12 @@ const Icons = () => ( + + + + + + ); diff --git a/client/src/components/ui/Line.js b/client/src/components/ui/Line.js index 6e13b2e3..636eb62a 100644 --- a/client/src/components/ui/Line.js +++ b/client/src/components/ui/Line.js @@ -1,7 +1,6 @@ import React from 'react'; import { ResponsiveLine } from '@nivo/line'; import addDays from 'date-fns/add_days'; -import addHours from 'date-fns/add_hours'; import subDays from 'date-fns/sub_days'; import subHours from 'date-fns/sub_hours'; import dateFormat from 'date-fns/format'; @@ -9,12 +8,14 @@ import round from 'lodash/round'; import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import './Line.css'; -import { msToDays } from '../../helpers/helpers'; +import { msToDays, msToHours } from '../../helpers/helpers'; +import { TIME_UNITS } from '../../helpers/constants'; const Line = ({ data, color = 'black', }) => { - const interval = msToDays(useSelector((state) => state.stats.interval)); + const interval = useSelector((state) => state.stats.interval); + const timeUnits = useSelector((state) => state.stats.timeUnits); return { - if (interval >= 0 && interval <= 7) { - const hoursAgo = subHours(Date.now(), 24 * interval); - return dateFormat(addHours(hoursAgo, x), 'D MMM HH:00'); + if (timeUnits === TIME_UNITS.HOURS) { + const hoursAgo = msToHours(interval) - x - 1; + return dateFormat(subHours(Date.now(), hoursAgo), 'D MMM HH:00'); } - const daysAgo = subDays(Date.now(), interval - 1); + const daysAgo = subDays(Date.now(), msToDays(interval) - 1); return dateFormat(addDays(daysAgo, x), 'D MMM YYYY'); }} yFormat={(y) => round(y, 2)} diff --git a/client/src/components/ui/Tooltip.js b/client/src/components/ui/Tooltip.js index 87b353de..b72a3667 100644 --- a/client/src/components/ui/Tooltip.js +++ b/client/src/components/ui/Tooltip.js @@ -21,6 +21,7 @@ const Tooltip = ({ delayShow = SHOW_TOOLTIP_DELAY, delayHide = HIDE_TOOLTIP_DELAY, onVisibilityChange, + defaultTooltipShown, }) => { const { t } = useTranslation(); const touchEventsAvailable = 'ontouchstart' in window; @@ -75,6 +76,7 @@ const Tooltip = ({ delayShow={delayShowValue} tooltip={renderTooltip} onVisibilityChange={onVisibilityChange} + defaultTooltipShown={defaultTooltipShown} > {renderTrigger} @@ -97,6 +99,7 @@ Tooltip.propTypes = { className: propTypes.string, triggerClass: propTypes.string, onVisibilityChange: propTypes.func, + defaultTooltipShown: propTypes.bool, }; export default Tooltip; diff --git a/client/src/helpers/constants.js b/client/src/helpers/constants.js index 1f72fc51..66ad3f51 100644 --- a/client/src/helpers/constants.js +++ b/client/src/helpers/constants.js @@ -554,3 +554,12 @@ export const DISABLE_PROTECTION_TIMINGS = { }; export const LOCAL_TIMEZONE_VALUE = 'Local'; + +export const TABLES_MIN_ROWS = 5; + +export const DASHBOARD_TABLES_DEFAULT_PAGE_SIZE = 100; + +export const TIME_UNITS = { + HOURS: 'hours', + DAYS: 'days', +}; diff --git a/client/src/helpers/renderFormattedClientCell.js b/client/src/helpers/renderFormattedClientCell.js index 3e610430..e70b6548 100644 --- a/client/src/helpers/renderFormattedClientCell.js +++ b/client/src/helpers/renderFormattedClientCell.js @@ -43,7 +43,7 @@ export const renderFormattedClientCell = (value, info, isDetailed = false, isLog const whoisAvailable = whois_info && Object.keys(whois_info).length > 0; if (name) { - const nameValue =
+ const nameValue =
{name} {`(${value})`}
; diff --git a/client/src/helpers/trackers/trackers.json b/client/src/helpers/trackers/trackers.json index 2f6b44cc..bd174292 100644 --- a/client/src/helpers/trackers/trackers.json +++ b/client/src/helpers/trackers/trackers.json @@ -1,5 +1,5 @@ { - "timeUpdated": "2023-10-08T00:09:45.691Z", + "timeUpdated": "2023-10-15T12:13:01.838Z", "categories": { "0": "audio_video_player", "1": "comments", @@ -243,7 +243,7 @@ "name": "Australian Broadcasting Corporation", "categoryId": 8, "url": "https://www.abc.net.au/", - "companyId": "abc", + "companyId": "australian_government", "source": "AdGuard" }, "ablida": { @@ -3593,6 +3593,13 @@ "url": null, "companyId": null }, + "bom": { + "name": "Bureau of Meteorology", + "categoryId": 9, + "url": "http://bom.gov.au/", + "companyId": "australian_government", + "source": "AdGuard" + }, "bombora": { "name": "Bombora", "categoryId": 6, @@ -5943,6 +5950,20 @@ "url": "https://discordapp.com/", "companyId": null }, + "disneyplus": { + "name": "Disney+", + "categoryId": 0, + "url": "https://www.disneyplus.com/", + "companyId": "disney", + "source": "AdGuard" + }, + "disneystreaming": { + "name": "Disney Streaming", + "categoryId": 0, + "url": "https://press.disneyplus.com", + "companyId": "disney", + "source": "AdGuard" + }, "display_block": { "name": "display block", "categoryId": 4, @@ -6160,6 +6181,13 @@ "url": "http://www.drawbrid.ge/", "companyId": "drawbridge" }, + "dreame_tech": { + "name": "Dreame Technology", + "categoryId": 8, + "url": "https://www.dreame.tech/", + "companyId": "xiaomi", + "source": "AdGuard" + }, "dreamlab.pl": { "name": "DreamLab.pl", "categoryId": 4, @@ -10372,7 +10400,7 @@ "name": "Let's Encrypt", "categoryId": 5, "url": "https://letsencrypt.org/", - "companyId": "lets_encrypt", + "companyId": "isrg", "source": "AdGuard" }, "letv": { @@ -19444,6 +19472,13 @@ "companyId": "xhamster", "source": "AdGuard" }, + "xiaomi": { + "name": "Xiaomi", + "categoryId": 8, + "url": "https://www.mi.com/", + "companyId": "xiaomi", + "source": "AdGuard" + }, "xing": { "name": "Xing", "categoryId": 6, @@ -20047,8 +20082,8 @@ "2leep.com": "2leep", "33across.com": "33across", "3dstats.com": "3dstats", - "3gppnetwork.org": "3gpp", "3gpp.org": "3gpp", + "3gppnetwork.org": "3gpp", "4cdn.org": "4chan", "4finance.com": "4finance_com", "4wnet.com": "4w_marketplace", @@ -20069,7 +20104,6 @@ "aaxads.com": "aaxads.com", "abtasty.com": "ab_tasty", "d1447tq2m68ekg.cloudfront.net": "ab_tasty", - "abc.net.au": "abc", "ab.co": "abc", "abc-cdn.net.au": "abc", "abc-host.net": "abc", @@ -20077,6 +20111,7 @@ "abc-prod.net.au": "abc", "abc-stage.net.au": "abc", "abc-test.net.au": "abc", + "abc.net.au": "abc", "abcaustralia.net.au": "abc", "abcradio.net.au": "abc", "ablida.de": "ablida", @@ -20238,17 +20273,17 @@ "adgorithms.com": "adgorithms", "adgoto.com": "adgoto", "adguard.com": "adguard", - "adtidy.org": "adguard", - "agrd.io": "adguard", "adguard.app": "adguard", "adguard.info": "adguard", "adguard.io": "adguard", "adguard.org": "adguard", + "adtidy.org": "adguard", + "agrd.io": "adguard", "adguard-dns.com": "adguard_dns", "adguard-dns.io": "adguard_dns", - "adguardvpn.com": "adguard_vpn", "adguard-vpn.com": "adguard_vpn", "adguard-vpn.online": "adguard_vpn", + "adguardvpn.com": "adguard_vpn", "adhands.ru": "adhands", "adhese.be": "adhese", "adhese.com": "adhese", @@ -20264,9 +20299,9 @@ "cdn.adjs.net": "adjs", "adjug.com": "adjug", "adjust.com": "adjust", - "adjust.net.in": "adjust", "adj.st": "adjust", "adjust.io": "adjust", + "adjust.net.in": "adjust", "adjust.world": "adjust", "apptrace.com": "adjust", "adk2.com": "adk2", @@ -20616,17 +20651,17 @@ "amazon.fr": "amazon", "amazon.it": "amazon", "d3io1k5o0zdpqr.cloudfront.net": "amazon", - "amazoncrl.com": "amazon", - "aamazoncognito.com": "amazon", - "amazonbrowserapp.es": "amazon", - "amazonbrowserapp.co.uk": "amazon", - "amazon.sa": "amazon", - "amazon.nl": "amazon", - "amazon.in": "amazon", - "amazon.com.mx": "amazon", - "amazon.com.au": "amazon", - "amazon-corp.com": "amazon", "a2z.com": "amazon", + "aamazoncognito.com": "amazon", + "amazon-corp.com": "amazon", + "amazon.com.au": "amazon", + "amazon.com.mx": "amazon", + "amazon.in": "amazon", + "amazon.nl": "amazon", + "amazon.sa": "amazon", + "amazonbrowserapp.co.uk": "amazon", + "amazonbrowserapp.es": "amazon", + "amazoncrl.com": "amazon", "firetvcaptiveportal.com": "amazon", "amazon-adsystem.com": "amazon_adsystem", "serving-sys.com": "amazon_adsystem", @@ -20692,31 +20727,32 @@ "eum-appdynamics.com": "appdynamics", "jscdn.appier.net": "appier", "apple.com": "apple", - "me.com": "apple", - "apple.news": "apple", - "apple-dns.net": "apple", "aaplimg.com": "apple", - "icloud.com": "apple", - "itunes.com": "apple", - "icloud-content.com": "apple", - "mzstatic.com": "apple", - "cdn-apple.com": "apple", - "apple-mapkit.com": "apple", - "icons.axm-usercontent-apple.com": "apple", "apple-cloudkit.com": "apple", - "apzones.com": "apple", + "apple-dns.net": "apple", "apple-livephotoskit.com": "apple", + "apple-mapkit.com": "apple", + "apple.news": "apple", + "apzones.com": "apple", + "cdn-apple.com": "apple", + "icloud-content.com": "apple", + "icloud.com": "apple", + "icons.axm-usercontent-apple.com": "apple", + "itunes.com": "apple", + "me.com": "apple", + "mzstatic.com": "apple", "safebrowsing.apple": "apple", "safebrowsing.g.applimg.com": "apple", "iadsdk.apple.com": "apple_ads", "applifier.com": "applifier", "assets.applovin.com": "applovin", - "applvn.com": "applovin", "applovin.com": "applovin", + "applvn.com": "applovin", "appmetrx.com": "appmetrx", "adnxs.com": "appnexus", "adnxs.net": "appnexus", "appsflyer.com": "appsflyer", + "appsflyersdk.com": "appsflyer", "adne.tv": "apptv", "readserver.net": "apptv", "www.apture.com": "apture", @@ -20926,6 +20962,7 @@ "secure.apps.shappify.com": "bold", "boldchat.com": "boldchat", "boltdns.net": "boltdns.net", + "bom.gov.au": "bom", "ml314.com": "bombora", "bongacams.com": "bongacams.com", "bonial.com": "bonial", @@ -21170,8 +21207,8 @@ "cloud-media.fr": "cloud-media.fr", "cloudflare.com": "cloudflare", "cloudflare.net": "cloudflare", - "cloudflare-dns.com": "cloudflare", "cloudflare-dm-cmpimg.com": "cloudflare", + "cloudflare-dns.com": "cloudflare", "cloudflare-ipfs.com": "cloudflare", "cloudflare-quic.com": "cloudflare", "cloudflare-terms-of-service-abuse.com": "cloudflare", @@ -21184,8 +21221,10 @@ "cloudflareresolve.com": "cloudflare", "cloudflaressl.com": "cloudflare", "cloudflarestatus.com": "cloudflare", + "cloudflarestream.com": "cloudflare", "pacloudflare.com": "cloudflare", "sn-cloudflare.com": "cloudflare", + "videodelivery.net": "cloudflare", "cloudimg.io": "cloudimage.io", "cloudinary.com": "cloudinary", "clovenetwork.com": "clove_network", @@ -21454,6 +21493,10 @@ "directadvert.ru": "directadvert", "directrev.com": "directrev", "discordapp.com": "discord", + "disneyplus.com": "disneyplus", + "bamgrid.com": "disneystreaming", + "dssedge.com": "disneystreaming", + "dssott.com": "disneystreaming", "d81mfvml8p5ml.cloudfront.net": "display_block", "disqus.com": "disqus", "disquscdn.com": "disqus", @@ -21497,6 +21540,8 @@ "doubleverify.com": "doubleverify", "wrating.com": "dratio", "adsymptotic.com": "drawbridge", + "dreame.tech": "dreame_tech", + "dreametech.com": "dreame_tech", "dreamlab.pl": "dreamlab.pl", "drift.com": "drift", "js.driftt.com": "drift", @@ -21717,18 +21762,18 @@ "findologic.com": "findologic.com", "app-measurement.com": "firebase", "fcm.googleapis.com": "firebase", - "firebaseappcheck.googleapis.com": "firebase", - "firebaseapp.com": "firebase", "firebase.com": "firebase", - "firebasedynamiclinks.googleapis.com": "firebase", + "firebase.google.com": "firebase", + "firebase.googleapis.com": "firebase", + "firebaseapp.com": "firebase", + "firebaseappcheck.googleapis.com": "firebase", "firebasedynamiclinks-ipv4.googleapis.com": "firebase", "firebasedynamiclinks-ipv6.googleapis.com": "firebase", - "firebase.googleapis.com": "firebase", - "firebase.google.com": "firebase", + "firebasedynamiclinks.googleapis.com": "firebase", "firebaseinappmessaging.googleapis.com": "firebase", "firebaseinstallations.googleapis.com": "firebase", - "firebaselogging.googleapis.com": "firebase", "firebaselogging-pa.googleapis.com": "firebase", + "firebaselogging.googleapis.com": "firebase", "firebaseperusertopics-pa.googleapis.com": "firebase", "firebaseremoteconfig.googleapis.com": "firebase", "firebaseio.com": "firebaseio.com", @@ -21806,9 +21851,9 @@ "freegeoip.net": "freegeoip_net", "freenet.de": "freenet_de", "freent.de": "freenet_de", - "freeviewaustralia.tv": "freeview", - "freeview.com.au": "freeview", "freeview.com": "freeview", + "freeview.com.au": "freeview", + "freeviewaustralia.tv": "freeview", "fwmrm.net": "freewheel", "heimdall.fresh8.co": "fresh8", "d36mpcpuzc4ztk.cloudfront.net": "freshdesk", @@ -21958,7 +22003,6 @@ "google.ae": "google", "google.al": "google", "google.am": "google", - "googleapis.cn": "google", "google.as": "google", "google.az": "google", "google.ba": "google", @@ -21981,11 +22025,20 @@ "google.co.bw": "google", "google.co.ck": "google", "google.co.cr": "google", - "googlecode.com": "google", "google.co.il": "google", "google.co.ke": "google", "google.co.kr": "google", "google.co.ls": "google", + "google.co.mz": "google", + "google.co.nz": "google", + "google.co.tz": "google", + "google.co.ug": "google", + "google.co.uz": "google", + "google.co.ve": "google", + "google.co.vi": "google", + "google.co.za": "google", + "google.co.zm": "google", + "google.co.zw": "google", "google.com.af": "google", "google.com.ag": "google", "google.com.ai": "google", @@ -22033,20 +22086,9 @@ "google.com.uy": "google", "google.com.vc": "google", "google.com.vn": "google", - "google.co.mz": "google", - "google.co.nz": "google", - "google.co.tz": "google", - "google.co.ug": "google", - "google.co.uz": "google", - "google.co.ve": "google", - "google.co.vi": "google", - "google.co.za": "google", - "google.co.zm": "google", - "google.co.zw": "google", "google.cv": "google", "google.dj": "google", "google.dm": "google", - "googledownloads.cn": "google", "google.ee": "google", "google.fm": "google", "google.ga": "google", @@ -22088,7 +22130,6 @@ "google.net": "google", "google.nr": "google", "google.nu": "google", - "googleoptimize.com": "google", "google.org": "google", "google.pn": "google", "google.ps": "google", @@ -22112,8 +22153,12 @@ "google.us": "google", "google.vg": "google", "google.vu": "google", - "googleweblight.in": "google", "google.ws": "google", + "googleapis.cn": "google", + "googlecode.com": "google", + "googledownloads.cn": "google", + "googleoptimize.com": "google", + "googleweblight.in": "google", "googlezip.net": "google", "gstatic.cn": "google", "news.google.com": "google", @@ -22140,10 +22185,10 @@ "alt7-mtalk.google.com": "google_chat", "alt8-mtalk.google.com": "google_chat", "chat.google.com": "google_chat", - "mobile-gtalk4.l.google.com": "google_chat", "mobile-gtalk.l.google.com": "google_chat", - "mtalk4.google.com": "google_chat", + "mobile-gtalk4.l.google.com": "google_chat", "mtalk.google.com": "google_chat", + "mtalk4.google.com": "google_chat", "talk.google.com": "google_chat", "talk.l.google.com": "google_chat", "talkx.l.google.com": "google_chat", @@ -22163,10 +22208,10 @@ "mail-ads.google.com": "google_email", "fonts.googleapis.com": "google_fonts", "cloudfunctions.net": "google_hosted", - "ghs46.googlehosted.com": "google_hosted", - "ghs4.googlehosted.com": "google_hosted", - "ghs6.googlehosted.com": "google_hosted", "ghs.googlehosted.com": "google_hosted", + "ghs4.googlehosted.com": "google_hosted", + "ghs46.googlehosted.com": "google_hosted", + "ghs6.googlehosted.com": "google_hosted", "googlehosted.l.googleusercontent.com": "google_hosted", "run.app": "google_hosted", "supl.google.com": "google_location", @@ -22180,9 +22225,9 @@ "maps.google.ca": "google_maps", "maps.google.ch": "google_maps", "maps.google.co.jp": "google_maps", + "maps.google.co.uk": "google_maps", "maps.google.com": "google_maps", "maps.google.com.mx": "google_maps", - "maps.google.co.uk": "google_maps", "maps.google.es": "google_maps", "maps.google.se": "google_maps", "maps.gstatic.com": "google_maps", @@ -22190,6 +22235,8 @@ "adservice.google.ca": "google_marketing", "adservice.google.co.in": "google_marketing", "adservice.google.co.kr": "google_marketing", + "adservice.google.co.uk": "google_marketing", + "adservice.google.co.za": "google_marketing", "adservice.google.com": "google_marketing", "adservice.google.com.ar": "google_marketing", "adservice.google.com.au": "google_marketing", @@ -22203,8 +22250,6 @@ "adservice.google.com.tr": "google_marketing", "adservice.google.com.tw": "google_marketing", "adservice.google.com.vn": "google_marketing", - "adservice.google.co.uk": "google_marketing", - "adservice.google.co.za": "google_marketing", "adservice.google.de": "google_marketing", "adservice.google.dk": "google_marketing", "adservice.google.es": "google_marketing", @@ -22219,17 +22264,17 @@ "googlesyndication-cn.com": "google_marketing", "duo.google.com": "google_meet", "hangouts.clients6.google.com": "google_meet", - "hangouts.googleapis.com": "google_meet", "hangouts.google.com": "google_meet", + "hangouts.googleapis.com": "google_meet", "meet.google.com": "google_meet", "meetings.googleapis.com": "google_meet", - "stun1.l.google.com": "google_meet", "stun.l.google.com": "google_meet", + "stun1.l.google.com": "google_meet", "ggpht.com": "google_photos", "play-fe.googleapis.com": "google_play", - "play.googleapis.com": "google_play", - "play.google.com": "google_play", "play-lh.googleusercontent.com": "google_play", + "play.google.com": "google_play", + "play.googleapis.com": "google_play", "1e100cdn.net": "google_servers", "gvt1.com": "google_servers", "gvt2.com": "google_servers", @@ -22531,9 +22576,9 @@ "iprom.net": "iprom", "ipromote.com": "ipromote", "clickmanage.com": "iprospect", - "qy.net": "iqiyi", - "iqiyi.com": "iqiyi", "iq.com": "iqiyi", + "iqiyi.com": "iqiyi", + "qy.net": "iqiyi", "addelive.com": "ironsource", "afdads.com": "ironsource", "delivery47.com": "ironsource", @@ -22772,11 +22817,11 @@ "footprint.net": "level3_communications", "alphonso.tv": "lgads", "lgads.tv": "lgads", + "lg.com": "lgtv", + "lge.com": "lgtv", "lgsmartad.com": "lgtv", "lgtvcommon.com": "lgtv", "lgtvsdp.com": "lgtv", - "lge.com": "lgtv", - "lg.com": "lgtv", "licensebuttons.net": "licensebuttons.net", "lfstmedia.com": "lifestreet_media", "content-recommendation.net": "ligatus", @@ -22971,8 +23016,8 @@ "s1.mediaad.org": "mediaad", "mlnadvertising.com": "mediaglu", "fhserve.com": "mediahub", - "medialab.la": "medialab", "media-lab.ai": "medialab", + "medialab.la": "medialab", "adnet.ru": "medialand", "medialand.ru": "medialand", "medialead.de": "medialead", @@ -23352,12 +23397,12 @@ "opinary.com": "opinary", "opinionbar.com": "opinionbar", "emagazines.com": "oplytic", - "oppomobile.com": "oppo", - "heytapmobi.com": "oppo", - "heytapmobile.com": "oppo", - "heytapdl.com": "oppo", "allawnos.com": "oppo", "allawntech.com": "oppo", + "heytapdl.com": "oppo", + "heytapmobi.com": "oppo", + "heytapmobile.com": "oppo", + "oppomobile.com": "oppo", "opta.net": "opta.net", "optaim.com": "optaim", "cookielaw.org": "optanaon", @@ -23484,8 +23529,9 @@ "loveadvert.ru": "play_by_mamba", "playbuzz.com": "playbuzz.com", "pof.com": "plenty_of_fish", - "plex.tv": "plex", + "plex.bz": "plex", "plex.direct": "plex", + "plex.tv": "plex", "analytics.plex.tv": "plex_metrics", "metrics.plex.tv": "plex_metrics", "plista.com": "plista", @@ -23896,6 +23942,7 @@ "samsungsds.com": "samsungsds", "internetat.tv": "samsungtv", "samsungcloud.tv": "samsungtv", + "tizenservice.com": "samsungtv", "ilsemedia.nl": "sanoma.fi", "sanoma.fi": "sanoma.fi", "d13im3ek7neeqp.cloudfront.net": "sap_crm", @@ -24000,12 +24047,12 @@ "cdn.shopify.com": "shopify", "myshopify.com": "shopify", "shop.app": "shopify", - "shopifyapps.com": "shopify", - "shopifycdn.net": "shopify", + "shopify.co.za": "shopify", "shopify.com.au": "shopify", "shopify.com.mx": "shopify", - "shopify.co.za": "shopify", "shopify.dev": "shopify", + "shopifyapps.com": "shopify", + "shopifycdn.net": "shopify", "shopifynetwork.com": "shopify", "shopifypreview.com": "shopify", "shopifysvc.com": "shopify_stats", @@ -24042,8 +24089,8 @@ "pages04.net": "silverpop", "pages05.net": "silverpop", "similardeals.net": "similardeals.net", - "similarweb.io": "similarweb", "similarweb.com": "similarweb", + "similarweb.io": "similarweb", "d8rk54i4mohrb.cloudfront.net": "simplereach", "simplereach.com": "simplereach", "simpli.fi": "simpli.fi", @@ -24082,10 +24129,10 @@ "skypeassets.com": "skype", "skysa.com": "skysa", "skyscnr.com": "skyscnr.com", - "slack.com": "slack", - "slackb.com": "slack", "slack-edge.com": "slack", "slack-imgs.com": "slack", + "slack.com": "slack", + "slackb.com": "slack", "slashdot.org": "slashdot_widget", "sleeknotestaticcontent.sleeknote.com": "sleeknote", "resultspage.com": "sli_systems", @@ -24356,8 +24403,8 @@ "teaser.cc": "teaser.cc", "emailretargeting.com": "tedemis", "tracking.dsmmadvantage.com": "teletech", - "telstra.com.au": "telstra", "telstra.com": "telstra", + "telstra.com.au": "telstra", "tenderapp.com": "tender", "tensitionschoo.club": "tensitionschoo.club", "watch.teroti.com": "teroti", @@ -24728,9 +24775,9 @@ "tools.vpscash.nl": "vpscash", "vsassets.io": "vs", "exp-tas.com": "vscode", - "vscode-unpkg.net": "vscode", "v0cdn.net": "vscode", "vscode-cdn.net": "vscode", + "vscode-unpkg.net": "vscode", "vtracy.de": "vtracy.de", "liftoff.io": "vungle", "vungle.com": "vungle", @@ -24803,8 +24850,8 @@ "wetter.com": "wetter_com", "wettercomassets.com": "wetter_com", "whatsbroadcast.com": "whatbroadcast", - "whatsapp.net": "whatsapp", "whatsapp.com": "whatsapp", + "whatsapp.net": "whatsapp", "whisper.onelink.me": "whisper", "whisper.sh": "whisper", "amung.us": "whos.amung.us", @@ -24876,6 +24923,13 @@ "xhamsterlive.com": "xhamster", "xhamsterpremium.com": "xhamster", "xhcdn.com": "xhamster", + "huami.com": "xiaomi", + "mi-img.com": "xiaomi", + "mi.com": "xiaomi", + "miui.com": "xiaomi", + "xiaomi.com": "xiaomi", + "xiaomi.net": "xiaomi", + "xiaomiyoupin.com": "xiaomi", "xing-share.com": "xing", "xing.com": "xing", "xmediaclicks.com": "xmediaclicks", diff --git a/client/src/reducers/stats.js b/client/src/reducers/stats.js index a7baeabe..a5c0e3fc 100644 --- a/client/src/reducers/stats.js +++ b/client/src/reducers/stats.js @@ -1,6 +1,11 @@ import { handleActions } from 'redux-actions'; import { normalizeTopClients } from '../helpers/helpers'; -import { DAY, HOUR, STATS_INTERVALS_DAYS } from '../helpers/constants'; +import { + DAY, + HOUR, + STATS_INTERVALS_DAYS, + TIME_UNITS, +} from '../helpers/constants'; import * as actions from '../actions/stats'; @@ -18,6 +23,7 @@ const defaultStats = { numReplacedSafebrowsing: 0, numReplacedSafesearch: 0, avgProcessingTime: 0, + timeUnits: TIME_UNITS.HOURS, }; const stats = handleActions( @@ -60,6 +66,7 @@ const stats = handleActions( avg_processing_time: avgProcessingTime, top_upstreams_responses: topUpstreamsResponses, top_upstrems_avg_time: topUpstreamsAvgTime, + time_units: timeUnits, } = payload; const newState = { @@ -81,6 +88,7 @@ const stats = handleActions( avgProcessingTime, topUpstreamsResponses, topUpstreamsAvgTime, + timeUnits, }; return newState; diff --git a/go.mod b/go.mod index 99958db8..2c0c1b46 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/AdguardTeam/AdGuardHome go 1.20 require ( - github.com/AdguardTeam/dnsproxy v0.56.1 + github.com/AdguardTeam/dnsproxy v0.56.2 github.com/AdguardTeam/golibs v0.17.1 github.com/AdguardTeam/urlfilter v0.17.0 github.com/NYTimes/gziphandler v1.1.1 @@ -13,7 +13,7 @@ require ( github.com/dimfeld/httptreemux/v5 v5.5.0 github.com/fsnotify/fsnotify v1.6.0 github.com/go-ping/ping v1.1.0 - github.com/google/go-cmp v0.5.9 + github.com/google/go-cmp v0.6.0 github.com/google/gopacket v1.1.19 github.com/google/renameio/v2 v2.0.0 github.com/google/uuid v1.3.1 @@ -27,14 +27,14 @@ require ( // own code for that. Perhaps, use gopacket. github.com/mdlayher/raw v0.1.0 github.com/miekg/dns v1.1.56 - github.com/quic-go/quic-go v0.39.0 + github.com/quic-go/quic-go v0.39.1 github.com/stretchr/testify v1.8.4 github.com/ti-mo/netfilter v0.5.0 go.etcd.io/bbolt v1.3.7 - golang.org/x/crypto v0.13.0 - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 - golang.org/x/net v0.15.0 - golang.org/x/sys v0.12.0 + golang.org/x/crypto v0.14.0 + golang.org/x/exp v0.0.0-20231006140011-7918f672742d + golang.org/x/net v0.17.0 + golang.org/x/sys v0.13.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 howett.net/plist v1.0.0 @@ -47,9 +47,9 @@ require ( github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect - github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8 // indirect + github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 // indirect github.com/mdlayher/socket v0.5.0 // indirect - github.com/onsi/ginkgo/v2 v2.12.1 // indirect + github.com/onsi/ginkgo/v2 v2.13.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -58,8 +58,8 @@ require ( github.com/quic-go/qtls-go1-20 v0.3.4 // indirect github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 // indirect go.uber.org/mock v0.3.0 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/sync v0.3.0 // indirect + golang.org/x/mod v0.13.0 // indirect + golang.org/x/sync v0.4.0 // indirect golang.org/x/text v0.13.0 // indirect - golang.org/x/tools v0.13.0 // indirect + golang.org/x/tools v0.14.0 // indirect ) diff --git a/go.sum b/go.sum index ea9114e4..817c7aea 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/AdguardTeam/dnsproxy v0.56.1 h1:QltfyWO7k4mxWERCEYDzkQnKzvZX/zkneWjbuJ0TU6o= -github.com/AdguardTeam/dnsproxy v0.56.1/go.mod h1:fqmehcE3cHFNqKbWQpIjGk7GqBy7ur1v5At499lFjRc= +github.com/AdguardTeam/dnsproxy v0.56.2 h1:+k1iUmp05QIqkgXWyPn70fki4FouHe6vHIyHguelKao= +github.com/AdguardTeam/dnsproxy v0.56.2/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM= github.com/AdguardTeam/golibs v0.17.1 h1:j3Ehhld5GI/amcHYG+CF0sJ4OOzAQ06BY3N/iBYJZ1M= github.com/AdguardTeam/golibs v0.17.1/go.mod h1:DKhCIXHcUYtBhU8ibTLKh1paUL96n5zhQBlx763sj+U= github.com/AdguardTeam/urlfilter v0.17.0 h1:tUzhtR9wMx704GIP3cibsDQJrixlMHfwoQbYJfPdFow= @@ -37,12 +37,12 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8 h1:gpptm606MZYGaMHMsB4Srmb6EbW/IVHnt04rcMXnkBQ= -github.com/google/pprof v0.0.0-20230912144702-c363fe2c2ed8/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ= +github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -76,8 +76,8 @@ github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrG github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE= github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/onsi/ginkgo/v2 v2.12.1 h1:uHNEO1RP2SpuZApSkel9nEh1/Mu+hmQe7Q+Pepg5OYA= -github.com/onsi/ginkgo/v2 v2.12.1/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= @@ -94,8 +94,8 @@ github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg= github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.39.0 h1:AgP40iThFMY0bj8jGxROhw3S0FMGa8ryqsmi9tBH3So= -github.com/quic-go/quic-go v0.39.0/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= +github.com/quic-go/quic-go v0.39.1 h1:d/m3oaN/SD2c+f7/yEjZxe2zEVotXprnrCCJ2y/ZZFE= +github.com/quic-go/quic-go v0.39.1/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -118,26 +118,26 @@ go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -150,8 +150,8 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -159,8 +159,8 @@ golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= diff --git a/internal/filtering/servicelist.go b/internal/filtering/servicelist.go index e5ec1278..2001d32a 100644 --- a/internal/filtering/servicelist.go +++ b/internal/filtering/servicelist.go @@ -256,6 +256,13 @@ var blockedServices = []blockedService{{ "||z.cn^", "||zappos^", }, +}, { + ID: "amino", + Name: "Amino", + IconSVG: []byte(""), + Rules: []string{ + "||aminoapps.com^", + }, }, { ID: "apple_streaming", Name: "Apple Streaming", @@ -337,6 +344,16 @@ var blockedServices = []blockedService{{ "||betwaysatta.com^", "||vietnambetway88.com^", }, +}, { + ID: "bigo_live", + Name: "Bigo Live", + IconSVG: []byte(""), + Rules: []string{ + "||bigo.sg^", + "||bigo.tv^", + "||bigolive.tv^", + "||bigovideo.tv^", + }, }, { ID: "bilibili", Name: "Bilibili", @@ -508,6 +525,13 @@ var blockedServices = []blockedService{{ "||deezer.com^", "||dzcdn.net^", }, +}, { + ID: "directvgo", + Name: "DirecTV Go", + IconSVG: []byte(""), + Rules: []string{ + "||directvgo.com^", + }, }, { ID: "discord", Name: "Discord", @@ -1975,6 +1999,23 @@ var blockedServices = []blockedService{{ "||sonyentertainmentnetwork.com", "||station.sony.com", }, +}, { + ID: "plenty_of_fish", + Name: "Plenty of Fish", + IconSVG: []byte(""), + Rules: []string{ + "||pof.com^", + }, +}, { + ID: "plex", + Name: "Plex", + IconSVG: []byte(""), + Rules: []string{ + "||plex.bz^", + "||plex.direct^", + "||plex.tv^", + "||plexapp.com^", + }, }, { ID: "pluto_tv", Name: "Pluto TV", @@ -2086,6 +2127,14 @@ var blockedServices = []blockedService{{ "||shopeemobile.com^", "||shp.ee^", }, +}, { + ID: "signal", + Name: "Signal", + IconSVG: []byte(""), + Rules: []string{ + "||signal.org^", + "||whispersystems.org^", + }, }, { ID: "skype", Name: "Skype", @@ -2210,6 +2259,14 @@ var blockedServices = []blockedService{{ "||tx.me^", "||usercontent.dev^", }, +}, { + ID: "temu", + Name: "Temu", + IconSVG: []byte(""), + Rules: []string{ + "||kwcdn.com^", + "||temu.com^", + }, }, { ID: "tidal", Name: "Tidal", @@ -2256,6 +2313,13 @@ var blockedServices = []blockedService{{ "||tinder.com^", "||tindersparks.com^", }, +}, { + ID: "tumblr", + Name: "Tumblr", + IconSVG: []byte(""), + Rules: []string{ + "||tumblr.com^", + }, }, { ID: "twitch", Name: "Twitch", @@ -2434,6 +2498,15 @@ var blockedServices = []blockedService{{ "||whatsapp.tv^", "||whatsappbrand.com^", }, +}, { + ID: "wizz", + Name: "Wizz", + IconSVG: []byte(""), + Rules: []string{ + "||getwizz.io^", + "||wizz.chat^", + "||wizzapp.com^", + }, }, { ID: "xboxlive", Name: "Xbox Live", @@ -2448,6 +2521,14 @@ var blockedServices = []blockedService{{ "||xboxlive.com^", "||xboxservices.com^", }, +}, { + ID: "xiaohongshu", + Name: "Xiaohongshu", + IconSVG: []byte(""), + Rules: []string{ + "||xhscdn.com^", + "||xiaohongshu.com^", + }, }, { ID: "youtube", Name: "YouTube", diff --git a/internal/querylog/qlog.go b/internal/querylog/qlog.go index 988e2b0f..ae058541 100644 --- a/internal/querylog/qlog.go +++ b/internal/querylog/qlog.go @@ -139,7 +139,7 @@ func (l *queryLog) clear() { l.bufferLock.Lock() defer l.bufferLock.Unlock() - l.buffer = nil + l.buffer.Clear() l.flushPending = false }() diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 5c1b3dec..f8b8feb5 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -8,29 +8,27 @@ require ( github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601 github.com/kisielk/errcheck v1.6.3 github.com/kyoh86/looppointer v0.2.1 - github.com/securego/gosec/v2 v2.17.0 - // TODO(a.garipov): Return to latest once the release is tagged - // correctly. See uudashr/gocognit#31. - github.com/uudashr/gocognit v1.0.8-0.20230906062305-bc9ca12659bf - golang.org/x/tools v0.13.0 + github.com/securego/gosec/v2 v2.18.1 + github.com/uudashr/gocognit v1.1.1 + golang.org/x/tools v0.14.0 golang.org/x/vuln v1.0.1 - honnef.co/go/tools v0.4.5 + honnef.co/go/tools v0.4.6 mvdan.cc/gofumpt v0.5.0 - mvdan.cc/unparam v0.0.0-20230815095028-f7c6fb1088f0 + mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb ) require ( github.com/BurntSushi/toml v1.3.2 // indirect github.com/ccojocar/zxcvbn-go v1.0.1 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/uuid v1.3.1 // indirect github.com/gookit/color v1.5.4 // indirect github.com/kyoh86/nolint v0.0.1 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect - golang.org/x/exp/typeparams v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.13.0 // indirect + golang.org/x/sync v0.4.0 // indirect + golang.org/x/sys v0.13.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/internal/tools/go.sum b/internal/tools/go.sum index e3f2edd1..ef504ab1 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -11,8 +11,8 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g= github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI= github.com/google/go-cmdtest v0.4.1-0.20220921163831-55ab3332a786 h1:rcv+Ippz6RAtvaGgKxc+8FQIpxHgsF+HBzPyYL2cyVU= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= @@ -29,15 +29,15 @@ github.com/kyoh86/looppointer v0.2.1 h1:Jx9fnkBj/JrIryBLMTYNTj9rvc2SrPS98Dg0w7fx github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw= github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU= github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI= -github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/ginkgo/v2 v2.12.1 h1:uHNEO1RP2SpuZApSkel9nEh1/Mu+hmQe7Q+Pepg5OYA= +github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/securego/gosec/v2 v2.17.0 h1:ZpAStTDKY39insEG9OH6kV3IkhQZPTq9a9eGOLOjcdI= -github.com/securego/gosec/v2 v2.17.0/go.mod h1:lt+mgC91VSmriVoJLentrMkRCYs+HLTBnUFUBuhV2hc= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/securego/gosec/v2 v2.18.1 h1:xnnehWg7dIW8qrRPGm8ykY21zp2MueKyC99Vlcuj96I= +github.com/securego/gosec/v2 v2.18.1/go.mod h1:ZUTcKD9gAFip1lLGHWCjkoBQJyaEzePTNzjwlL2HHoE= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/uudashr/gocognit v1.0.8-0.20230906062305-bc9ca12659bf h1:LA5CHw6L5BvI0RjqvBYa9+3hXAL2rhuAJPtS5rS2a2k= -github.com/uudashr/gocognit v1.0.8-0.20230906062305-bc9ca12659bf/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/uudashr/gocognit v1.1.1 h1:qIj6KhmcGQGBiWtaKH6ZlIyDGa6br2febZNZ6MDzqMw= +github.com/uudashr/gocognit v1.1.1/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -49,26 +49,26 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20230905200255-921286631fa9 h1:j3D9DvWRpUfIyFfDPws7LoIZ2MAI1OJHdQXtTnYtN+k= -golang.org/x/exp/typeparams v0.0.0-20230905200255-921286631fa9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d h1:NRn/Afz91uVUyEsxMp4lGGxpr5y1qz+Iko60dbkfvLQ= +golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -79,22 +79,22 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/vuln v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU= golang.org/x/vuln v1.0.1/go.mod h1:bb2hMwln/tqxg32BNY4CcxHWtHXuYa3SbIBmtsyjxtM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -104,9 +104,9 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.4.5 h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo= -honnef.co/go/tools v0.4.5/go.mod h1:GUV+uIBCLpdf0/v6UhHHG/yzI/z6qPskBeQCjcNB96k= +honnef.co/go/tools v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8= +honnef.co/go/tools v0.4.6/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= -mvdan.cc/unparam v0.0.0-20230815095028-f7c6fb1088f0 h1:NAENkqZ+Xofhqs4R4Af+i3HpZj1M23SFn/lHfRh1D4E= -mvdan.cc/unparam v0.0.0-20230815095028-f7c6fb1088f0/go.mod h1:flQN1deud3vIpPdF88533Lpp/MvzGLgPIPjB1kgBf4I= +mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb h1:xiF91GJnDSbyPdiZB5d52N2VpZfGhjM4Ji75cjzuooQ= +mvdan.cc/unparam v0.0.0-20230917202934-3ee2d22f45fb/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI=