luci/applications/luci-app-statistics
Hosted Weblate fc90e666dc Translated using Weblate (Ukrainian)
Currently translated at 2.5% (1 of 40 strings)

Translation: OpenWrt/LuCI/applications/cloudflared
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationscloudflared/uk/

Translated using Weblate (Ukrainian)

Currently translated at 12.3% (10 of 81 strings)

Translation: OpenWrt/LuCI/applications/email
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsemail/uk/

Translated using Weblate (Ukrainian)

Currently translated at 3.0% (1 of 33 strings)

Translation: OpenWrt/LuCI/applications/v2raya
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsv2raya/uk/

Translated using Weblate (Ukrainian)

Currently translated at 2.7% (2 of 74 strings)

Translation: OpenWrt/LuCI/applications/xinetd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsxinetd/uk/

Translated using Weblate (Ukrainian)

Currently translated at 5.0% (1 of 20 strings)

Translated using Weblate (Ukrainian)

Currently translated at 6.6% (1 of 15 strings)

Translation: OpenWrt/LuCI/applications/snmpd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationssnmpd/uk/

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (83 of 83 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (26 of 26 strings)

Translation: OpenWrt/LuCI/applications/dcwapd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdcwapd/lt/

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/lt/

Translated using Weblate (Ukrainian)

Currently translated at 80.6% (50 of 62 strings)

Translation: OpenWrt/LuCI/applications/acme
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsacme/uk/

Translated using Weblate (Hebrew)

Currently translated at 5.8% (2 of 34 strings)

Translation: OpenWrt/LuCI/applications/wifischedule
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationswifischedule/he/

Translated using Weblate (Hebrew)

Currently translated at 1.6% (3 of 186 strings)

Translation: OpenWrt/LuCI/applications/unbound
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsunbound/he/

Translated using Weblate (Ukrainian)

Currently translated at 8.6% (16 of 186 strings)

Translation: OpenWrt/LuCI/applications/unbound
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsunbound/uk/

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (7 of 7 strings)

Translation: OpenWrt/LuCI/applications/squid
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationssquid/uk/

Translated using Weblate (Ukrainian)

Currently translated at 18.2% (15 of 82 strings)

Translation: OpenWrt/LuCI/applications/shadowsocks-libev
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsshadowsocks-libev/uk/

Translated using Weblate (Ukrainian)

Currently translated at 9.6% (12 of 125 strings)

Translation: OpenWrt/LuCI/applications/privoxy
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsprivoxy/uk/

Translated using Weblate (Hebrew)

Currently translated at 9.6% (6 of 62 strings)

Translation: OpenWrt/LuCI/applications/ocserv
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsocserv/he/

Translated using Weblate (Ukrainian)

Currently translated at 32.2% (20 of 62 strings)

Translation: OpenWrt/LuCI/applications/ocserv
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsocserv/uk/

Translated using Weblate (Hebrew)

Currently translated at 20.1% (25 of 124 strings)

Translation: OpenWrt/LuCI/applications/nlbwmon
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsnlbwmon/he/

Translated using Weblate (Ukrainian)

Currently translated at 15.3% (19 of 124 strings)

Translation: OpenWrt/LuCI/applications/nlbwmon
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsnlbwmon/uk/

Translated using Weblate (Hebrew)

Currently translated at 10.1% (6 of 59 strings)

Translation: OpenWrt/LuCI/applications/nft-qos
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsnft-qos/he/

Translated using Weblate (Ukrainian)

Currently translated at 21.7% (37 of 170 strings)

Translation: OpenWrt/LuCI/applications/mwan3
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsmwan3/uk/

Translated using Weblate (Ukrainian)

Currently translated at 20.4% (10 of 49 strings)

Translation: OpenWrt/LuCI/applications/mjpg-streamer
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsmjpg-streamer/uk/

Translated using Weblate (Ukrainian)

Currently translated at 51.6% (16 of 31 strings)

Translation: OpenWrt/LuCI/applications/dynapoint
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdynapoint/uk/

Translated using Weblate (Ukrainian)

Currently translated at 8.9% (5 of 56 strings)

Translation: OpenWrt/LuCI/applications/dump1090
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdump1090/uk/

Translated using Weblate (Hebrew)

Currently translated at 4.6% (3 of 65 strings)

Translation: OpenWrt/LuCI/applications/dnscrypt-proxy
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdnscrypt-proxy/he/

Translated using Weblate (Ukrainian)

Currently translated at 42.3% (11 of 26 strings)

Translation: OpenWrt/LuCI/applications/dcwapd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdcwapd/uk/

Translated using Weblate (Ukrainian)

Currently translated at 48.0% (12 of 25 strings)

Translation: OpenWrt/LuCI/applications/cshark
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationscshark/uk/

Translated using Weblate (Ukrainian)

Currently translated at 24.4% (12 of 49 strings)

Translation: OpenWrt/LuCI/applications/bmx7
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsbmx7/uk/

Translated using Weblate (Ukrainian)

Currently translated at 11.0% (27 of 244 strings)

Translation: OpenWrt/LuCI/applications/banip
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsbanip/uk/

Translated using Weblate (Ukrainian)

Currently translated at 19.0% (32 of 168 strings)

Translation: OpenWrt/LuCI/applications/aria2
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsaria2/uk/

Translated using Weblate (Ukrainian)

Currently translated at 32.9% (65 of 197 strings)

Translation: OpenWrt/LuCI/applications/ddns
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsddns/uk/

Translated using Weblate (Ukrainian)

Currently translated at 98.3% (61 of 62 strings)

Translated using Weblate (Ukrainian)

Currently translated at 30.4% (7 of 23 strings)

Translated using Weblate (Ukrainian)

Currently translated at 17.6% (20 of 113 strings)

Translated using Weblate (Hebrew)

Currently translated at 34.0% (46 of 135 strings)

Translated using Weblate (Ukrainian)

Currently translated at 15.6% (16 of 102 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Ukrainian)

Currently translated at 16.9% (31 of 183 strings)

Translated using Weblate (Ukrainian)

Currently translated at 17.5% (13 of 74 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (33 of 33 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (83 of 83 strings)

Translated using Weblate (Ukrainian)

Currently translated at 15.5% (9 of 58 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.5% (1932 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/uk/

Translated using Weblate (Ukrainian)

Currently translated at 1.3% (1 of 74 strings)

Translation: OpenWrt/LuCI/applications/xinetd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsxinetd/uk/

Translated using Weblate (Ukrainian)

Currently translated at 2.0% (1 of 48 strings)

Translation: OpenWrt/LuCI/applications/openwisp
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopenwisp/uk/

Translated using Weblate (Ukrainian)

Currently translated at 2.1% (1 of 46 strings)

Translation: OpenWrt/LuCI/applications/xfrpc
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsxfrpc/uk/

Translated using Weblate (Ukrainian)

Currently translated at 5.8% (1 of 17 strings)

Translation: OpenWrt/LuCI/applications/eoip
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationseoip/uk/

Translated using Weblate (Ukrainian)

Currently translated at 2.5% (1 of 40 strings)

Translation: OpenWrt/LuCI/applications/example
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsexample/uk/

Translated using Weblate (Ukrainian)

Currently translated at 3.0% (2 of 66 strings)

Translation: OpenWrt/LuCI/applications/sshtunnel
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationssshtunnel/uk/

Translated using Weblate (Ukrainian)

Currently translated at 1.1% (1 of 88 strings)

Translation: OpenWrt/LuCI/applications/mosquitto
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsmosquitto/uk/

Translated using Weblate (Ukrainian)

Currently translated at 5.2% (1 of 19 strings)

Translation: OpenWrt/LuCI/applications/irqbalance
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsirqbalance/uk/

Translated using Weblate (Ukrainian)

Currently translated at 1.0% (2 of 198 strings)

Translation: OpenWrt/LuCI/applications/smartdns
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationssmartdns/uk/

Translated using Weblate (Ukrainian)

Currently translated at 4.7% (1 of 21 strings)

Translation: OpenWrt/LuCI/applications/tor
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationstor/uk/

Translated using Weblate (Ukrainian)

Currently translated at 3.0% (1 of 33 strings)

Translation: OpenWrt/LuCI/applications/alist
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsalist/uk/

Translated using Weblate (Ukrainian)

Currently translated at 13.3% (17 of 127 strings)

Translation: OpenWrt/LuCI/applications/pbr
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationspbr/uk/

Translated using Weblate (Ukrainian)

Currently translated at 21.3% (19 of 89 strings)

Translation: OpenWrt/LuCI/applications/frpc
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsfrpc/uk/

Translated using Weblate (Ukrainian)

Currently translated at 21.5% (14 of 65 strings)

Translation: OpenWrt/LuCI/applications/https-dns-proxy
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationshttps-dns-proxy/uk/

Translated using Weblate (Ukrainian)

Currently translated at 50.0% (1 of 2 strings)

Translation: OpenWrt/LuCI/applications/olsr-viz
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsolsr-viz/uk/

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (6 of 6 strings)

Translation: OpenWrt/LuCI/applications/olsr-services
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsolsr-services/uk/

Translated using Weblate (Ukrainian)

Currently translated at 96.0% (49 of 51 strings)

Translated using Weblate (Ukrainian)

Currently translated at 78.3% (29 of 37 strings)

Translated using Weblate (Ukrainian)

Currently translated at 75.0% (210 of 280 strings)

Translated using Weblate (Ukrainian)

Currently translated at 81.1% (1923 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/uk/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (280 of 280 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Lithuanian)

Currently translated at 95.1% (156 of 164 strings)

Translation: OpenWrt/LuCI/applications/adblock-fast
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsadblock-fast/lt/

Translated using Weblate (Lithuanian)

Currently translated at 78.4% (51 of 65 strings)

Translation: OpenWrt/LuCI/applications/https-dns-proxy
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationshttps-dns-proxy/lt/

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (194 of 194 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (376 of 376 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (211 of 211 strings)

Translation: OpenWrt/LuCI/applications/dockerman
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsdockerman/lt/

Translated using Weblate (Lithuanian)

Currently translated at 89.6% (174 of 194 strings)

Translated using Weblate (Lithuanian)

Currently translated at 97.8% (2320 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/lt/

Translated using Weblate (German)

Currently translated at 100.0% (164 of 164 strings)

Translation: OpenWrt/LuCI/applications/adblock-fast
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsadblock-fast/de/

Translated using Weblate (Lithuanian)

Currently translated at 89.6% (174 of 194 strings)

Translated using Weblate (Portuguese)

Currently translated at 100.0% (37 of 37 strings)

Translated using Weblate (German)

Currently translated at 100.0% (37 of 37 strings)

Translated using Weblate (Portuguese)

Currently translated at 100.0% (83 of 83 strings)

Translated using Weblate (German)

Currently translated at 100.0% (83 of 83 strings)

Translated using Weblate (German)

Currently translated at 91.6% (2173 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/de/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (74 of 74 strings)

Translation: OpenWrt/LuCI/applications/xinetd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsxinetd/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (81 of 81 strings)

Translation: OpenWrt/LuCI/applications/email
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsemail/zh_Hans/

Translated using Weblate (Lithuanian)

Currently translated at 89.1% (173 of 194 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (48 of 48 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (177 of 177 strings)

Translation: OpenWrt/LuCI/applications/adblock
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsadblock/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (197 of 197 strings)

Translation: OpenWrt/LuCI/applications/ddns
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsddns/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (183 of 183 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (194 of 194 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (40 of 40 strings)

Translation: OpenWrt/LuCI/applications/cloudflared
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationscloudflared/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (33 of 33 strings)

Translation: OpenWrt/LuCI/applications/v2raya
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsv2raya/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (15 of 15 strings)

Translation: OpenWrt/LuCI/applications/snmpd
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationssnmpd/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (17 of 17 strings)

Translation: OpenWrt/LuCI/applications/eoip
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationseoip/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (120 of 120 strings)

Translation: OpenWrt/LuCI/applications/usteer
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsusteer/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (88 of 88 strings)

Translation: OpenWrt/LuCI/applications/mosquitto
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsmosquitto/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (20 of 20 strings)

Translation: OpenWrt/LuCI/applications/crowdsec-firewall-bouncer
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationscrowdsec-firewall-bouncer/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (33 of 33 strings)

Translation: OpenWrt/LuCI/applications/alist
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsalist/zh_Hans/

Translated using Weblate (Romanian)

Currently translated at 98.5% (66 of 67 strings)

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (17 of 17 strings)

Translation: OpenWrt/LuCI/applications/udpxy
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsudpxy/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (82 of 82 strings)

Translation: OpenWrt/LuCI/applications/shadowsocks-libev
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsshadowsocks-libev/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (40 of 40 strings)

Translation: OpenWrt/LuCI/applications/clamav
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsclamav/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (168 of 168 strings)

Translation: OpenWrt/LuCI/applications/aria2
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsaria2/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (186 of 186 strings)

Translation: OpenWrt/LuCI/applications/unbound
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsunbound/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (2370 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/zh_Hans/

Translated using Weblate (Romanian)

Currently translated at 91.5% (2170 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/ro/

Translated using Weblate (Spanish)

Currently translated at 94.9% (2250 of 2370 strings)

Translation: OpenWrt/LuCI/modules/luci-base
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci/es/

Co-authored-by: Džiugas J <dziugas1959@hotmail.com>
Co-authored-by: Franco Castillo <castillofrancodamian@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Tianling Shen <i@cnsztl.eu.org>
Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: try496 <pinghejk@gmail.com>
Co-authored-by: Костянтин Серьогін <seryoginki@gmail.com>
Signed-off-by: Džiugas J <dziugas1959@hotmail.com>
Signed-off-by: Franco Castillo <castillofrancodamian@gmail.com>
Signed-off-by: Tianling Shen <i@cnsztl.eu.org>
Signed-off-by: Yaron Shahrabani <sh.yaron@gmail.com>
Signed-off-by: ssantos <ssantos@web.de>
Signed-off-by: try496 <pinghejk@gmail.com>
Signed-off-by: Костянтин Серьогін <seryoginki@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/openwrt/luci_modules_luci-mod-dsl/ro/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsahcp/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsfirewall/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsfirewall/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsminidlna/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsnatmap/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsnut/he/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsolsr/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsolsr/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopenvpn/lt/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopenvpn/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopkg/de/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopkg/lt/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopkg/pt/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsopkg/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationspolipo/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsradicale2/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsrp-pppoe-server/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsstatistics/lt/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationstinyproxy/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationstransmission/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsuhttpd/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationsupnp/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationswatchcat/de/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationswatchcat/pt/
Translate-URL: https://hosted.weblate.org/projects/openwrt/luciapplicationswatchcat/uk/
Translate-URL: https://hosted.weblate.org/projects/openwrt/lucimodulesluci-mod-dashboard/zh_Hans/
Translation: OpenWrt/LuCI/applications/ahcp
Translation: OpenWrt/LuCI/applications/firewall
Translation: OpenWrt/LuCI/applications/minidlna
Translation: OpenWrt/LuCI/applications/natmap
Translation: OpenWrt/LuCI/applications/nut
Translation: OpenWrt/LuCI/applications/olsr
Translation: OpenWrt/LuCI/applications/openvpn
Translation: OpenWrt/LuCI/applications/opkg
Translation: OpenWrt/LuCI/applications/polipo
Translation: OpenWrt/LuCI/applications/radicale2
Translation: OpenWrt/LuCI/applications/rp-pppoe-server
Translation: OpenWrt/LuCI/applications/statistics
Translation: OpenWrt/LuCI/applications/tinyproxy
Translation: OpenWrt/LuCI/applications/transmission
Translation: OpenWrt/LuCI/applications/uhttpd
Translation: OpenWrt/LuCI/applications/upnp
Translation: OpenWrt/LuCI/applications/watchcat
Translation: OpenWrt/LuCI/modules/luci-mod-dashboard
Translation: OpenWrt/LuCI/modules/luci-mod-dsl
2024-02-25 10:28:54 +02:00
..
htdocs/luci-static/resources luci-app-statistics: lookup -> look up 2023-12-19 20:44:58 +01:00
po Translated using Weblate (Ukrainian) 2024-02-25 10:28:54 +02:00
root luci-app-statistics: Add rrd backup option to config file 2024-02-03 11:59:31 +02:00
Makefile luci-app-statistics: rewrite stat-genconfig in ucode 2022-10-25 01:03:37 +02:00
README.md luci-app-statistics: Add backup/restore for RRD statistics 2023-10-29 19:48:38 -04:00

Backups

The backup scheme implemented in /etc/init.d/luci_statistics aims to limit writes to stable storage, to preserve flash memory lifetime. (Flash-memory based routers may have limited lifetime of write cycles, we want to conserve those.) While it would be simpler to run a periodic backup as a cron job, you'd risk wearing out the flash memory. This scheme only writes backups to flash during shutdowns/reboots and upgrades.

The backup is only enabled if the administrator sets luci_statistics.collectd_rrdtool.backup=1.

We only want to restore a sysupgrade backup file if:

  1. It was installed by sysupgrade -r (restore configuration files), and we have rebooted. In this case, there is an orderly shutdown that calls the shutdown methods. We do not want to overwrite the restored sysupgrade backup file during shutdown, but after reboot we do want to restore it.

  2. It was generated during a true sysupgrade, and we are rebooting into the new image: sysupgrade with any or none of -o, -c, -f, -u, resulting in a new image being installed and a config file being preserved for processing after reboot. In this case we do not want to overwrite the backup while rebooting during the upgrade. sysupgrade in this case stores a .tgz archive of all preserved files where it can be found after rebooting into the new image, and it does not run the shutdown scripts before rebooting.

When the administrator runs sysupgrade -b (command line or LuCI), we create a sysupgrade backup file and it is included in the combined backup. Then the system continues running. When we later stop or restart or reboot (orderly conditions, when /etc/init.d/luci_statistics is called to shut down), we do not want to use the saved sysupgrade backup. If we had a control path after sysupgrade -b that would allow us to remove the sysupgrade backup, this would be simple. But we don't!

What we can do is arrange that a sysupgrade backup contains enough information to indicate if it should be restored.

  1. True sysupgrade is straightforward: we arrange that the backed-up file list only includes the sysupgrade backup file and one twin file (see below). The next starting of /etc/init.d/luci_statistics after a sysupgrade will restore the sysupgrade backup.

  2. Continued system operation after sysupgrade -b: next time we stop the service (during reboot or during other init script actions), we check for a stale sysupgrade backup, and if we detect it we remove it.

  3. sysupgrade -r only unpacks the backup files, it does not erase other non-backed-up files still in the overlay. Its intended use is to then immediately reboot, which will run an orderly shutdown/normal backup. We must ensure the orderly shutdown in this case preserves the sysupgrade backup, unlike the previous case.

To implement these cases, we use a pair of twinned files, only one of which is included in the list of files preserved by sysupgrade. If we detect mismatched files (or only one file present) during service shutdown or startup, we trust that the sysupgrade backup should be kept and restored. If the files are matched, that indicates that we have not restored files since the sysupgrade backup, and the current normal backup should be used instead.

During sysupgrade backup

/etc/init.d/luci_statistics sysupgrade_backup is invoked by sysupgrade for true upgrade or for the -l or -b flags. We detect the list flag (-l) by checking the process environment, and if found, we only generate a list: we don't actually do a backup. For all cases, we edit the list of files listed already and remove any other mentions of /etc/luci_statistics to ensure that only the backup file and one of the twin files is in the backup list.

During sysupgrade

During a true sysupgrade, only the sysupgrade backup file and one of the twin files is restored after the image reboots, so the first running of startup scripting will restore the sysupgrade backup. This could be at the time of first boot, if the image has been built to include this package, or it could be later when the package is downloaded, installed, and the service is started.

During backup (including orderly shutdown)

During backup (run during shutdown), if there is a matched set of twins, then we know that sometime since the last service start the administrator ran sysupgrade -b and had the chance to copy the resulting backup. We can now erase the twins and the sysupgrade backup.

If there is a mismatched set of twins, then someone restored a backup such as with sysupgrade -r and we should now be rebooting, so we should leave the sysupgrade files alone to be processed on service restart (after reboot).

If someone takes a sysupgrade -b backup and then restores it before they reboot or restart statistics, the twins will still match, and we then don't keep the statistics from the restored backup, we instead take a new backup from current data and use that on reboot.

During startup

If there are matched twin files (the normal case for shutdown/reboot without sysupgrade), then the sysupgrade backup is ignored and the regular backup is restored. If there are mismatched twin files, then the sysupgrade backup is restored.

During disorderly reboot

In a system crash or other disorderly reboot, the shutdown scripts do not run. What remains on the system is the previous contents of /etc/luci_statistics.

  • If the system never started luci_statistics, or it was cleanly shut down before the crash, then there is no difference in behavior from normal startup: we restore either the sysupgrade backup (if luci_statistics had never run) or the regular backup (if luci_statistics was cleanly stopped)

  • If luci_statistics and collectd were running at the time of the crash, there could be a regular backup and a sysupgrade backup present, plus volatile data in /tmp (which are lost in the crash). The regular backup would be from the most recent time the system cleanly stopped luci_statistics. During the subsequent reboot/service start up:

    • If there is a sysupgrade backup on disk from having run sysupgrade -b, with both twin files matching (meaning the administrator had taken a backup sometime during the life of the system, before the crash), they are ignored and a regular backup (if any) is restored.

    • If the sysupgrade backup has mismatched twin files or only one twin, then it is used to restore state. This would be the case if a sysupgrade restored configuration (sysupgrade -r), whether or not it did an orderly shutdown/reboot, or if the file system were damaged in a crash and only one of the twin files survived.