mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-06 03:14:12 +08:00
🔥 Sync 2026-05-27 08:43:02
This commit is contained in:
1 parent
bbd22dd0b2
commit
9a80633c00
19 files changed
+2685
-109
No files matched your search
@@ -1,15 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Copyright 2024 Rafał Wabik (IceG) - From eko.one.pl forum
|
||||
# Copyright 2024-2026 Rafał Wabik (IceG) - From eko.one.pl forum
|
||||
# Licensed to the GNU General Public License v3.0.
|
||||
|
||||
chmod +x /etc/uci-defaults/setup_easyconfig_transfer.sh 2>&1 &
|
||||
chmod +x /sbin/transfer2cron.sh 2>&1 &
|
||||
chmod +x /sbin/backup2cron.sh 2>&1 &
|
||||
chmod +x /usr/bin/easyconfig_statistics.sh 2>&1 &
|
||||
chmod +x /usr/bin/easyconfig_statistics.uc 2>&1 &
|
||||
chmod +x /etc/uci-defaults/setup_easyconfig_transfer.sh >/dev/null 2>&1 &
|
||||
|
||||
echo "{}" > /tmp/easyconfig_statistics.json
|
||||
chmod +x /usr/bin/auto_reset_statistics.sh >/dev/null 2>&1 &
|
||||
|
||||
rm -rf /tmp/luci-indexcache 2>&1 &
|
||||
rm -rf /tmp/luci-modulecache/ 2>&1 &
|
||||
chmod +x /usr/bin/easyconfig_statistics.sh >/dev/null 2>&1 &
|
||||
chmod +x /usr/bin/easyconfig_statistics.uc >/dev/null 2>&1 &
|
||||
|
||||
echo "{}" > /tmp/easyconfig_statistics.json >/dev/null 2>&1 &
|
||||
|
||||
mkdir -p /usr/lib/easyconfig >/dev/null 2>&1 &
|
||||
|
||||
rm -rf /tmp/luci-indexcache >/dev/null 2>&1 &
|
||||
rm -rf /tmp/luci-modulecache/ >/dev/null 2>&1 &
|
||||
exit 0
|
||||
@@ -24,38 +24,112 @@ MBACKUP=$(uci -q get easyconfig_transfer.traffic.external_backup)
|
||||
MBACKUPATH=$(uci -q get easyconfig_transfer.traffic.external_path)
|
||||
EXTERNAL_JSON="$MBACKUPATH/easyconfig_statistics.json"
|
||||
|
||||
json_valid() {
|
||||
local file="$1"
|
||||
[ -e "$file" ] || return 1
|
||||
[ -s "$file" ] || return 1
|
||||
jq -e 'type == "object"' "$file" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
safe_copy() {
|
||||
local src="$1"
|
||||
local dst="$2"
|
||||
if json_valid "$src"; then
|
||||
cp "$src" "$dst"
|
||||
return 0
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: plik $src zawiera nieprawidłowy JSON, pomijam kopiowanie"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -e "$DB" ]; then
|
||||
if [ "$MBACKUP" = "1" ] && [ -n "$MBACKUPATH" ] && [ -e "$EXTERNAL_JSON" ] && [ -e "$SDB" ]; then
|
||||
TMP_GZ=/tmp/easyconfig_statistics_gz_tmp.json
|
||||
zcat "$SDB" > "$TMP_GZ" 2>/dev/null
|
||||
if [ -e "$TMP_GZ" ]; then
|
||||
EXT_SIZE=$(wc -c < "$EXTERNAL_JSON")
|
||||
GZ_SIZE=$(wc -c < "$TMP_GZ")
|
||||
if [ "$EXT_SIZE" -gt "$GZ_SIZE" ]; then
|
||||
|
||||
EXT_VALID=0
|
||||
GZ_VALID=0
|
||||
json_valid "$EXTERNAL_JSON" && EXT_VALID=1
|
||||
json_valid "$TMP_GZ" && GZ_VALID=1
|
||||
|
||||
if [ "$EXT_VALID" = "1" ] && [ "$GZ_VALID" = "1" ]; then
|
||||
EXT_SIZE=$(wc -c < "$EXTERNAL_JSON")
|
||||
GZ_SIZE=$(wc -c < "$TMP_GZ")
|
||||
if [ "$EXT_SIZE" -gt "$GZ_SIZE" ]; then
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
else
|
||||
cp "$TMP_GZ" "$DB"
|
||||
easyconfig_statistics.uc "init" "init" 0 0 0 "" 0
|
||||
fi
|
||||
elif [ "$EXT_VALID" = "1" ]; then
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: plik gz zawiera nieprawidłowy JSON, używam zewnętrznej kopii"
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
else
|
||||
elif [ "$GZ_VALID" = "1" ]; then
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: zewnętrzna kopia zawiera nieprawidłowy JSON, używam pliku gz"
|
||||
cp "$TMP_GZ" "$DB"
|
||||
easyconfig_statistics.uc "init" "init" 0 0 0 "" 0
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: oba źródła zawierają nieprawidłowy JSON, inicjalizuję nową bazę"
|
||||
mkdir -p $(dirname "$SDB")
|
||||
echo "{}" > "$DB"
|
||||
fi
|
||||
rm -f "$TMP_GZ"
|
||||
else
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
safe_copy "$EXTERNAL_JSON" "$DB" || echo "{}" > "$DB"
|
||||
fi
|
||||
elif [ "$MBACKUP" = "1" ] && [ -n "$MBACKUPATH" ] && [ -e "$EXTERNAL_JSON" ]; then
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
safe_copy "$EXTERNAL_JSON" "$DB" || echo "{}" > "$DB"
|
||||
elif [ -e "$SDB" ]; then
|
||||
zcat "$SDB" > "$DB"
|
||||
easyconfig_statistics.uc "init" "init" 0 0 0 "" 0
|
||||
TMP_GZ=/tmp/easyconfig_statistics_gz_tmp.json
|
||||
zcat "$SDB" > "$TMP_GZ" 2>/dev/null
|
||||
if json_valid "$TMP_GZ"; then
|
||||
mv "$TMP_GZ" "$DB"
|
||||
easyconfig_statistics.uc "init" "init" 0 0 0 "" 0
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: plik gz zawiera nieprawidłowy JSON, inicjalizuję nową bazę"
|
||||
rm -f "$TMP_GZ"
|
||||
mkdir -p $(dirname "$SDB")
|
||||
echo "{}" > "$DB"
|
||||
fi
|
||||
else
|
||||
mkdir -p $(dirname "$SDB")
|
||||
echo "{}" > "$DB"
|
||||
fi
|
||||
else
|
||||
if [ "$MBACKUP" = "1" ] && [ -n "$MBACKUPATH" ] && [ -e "$EXTERNAL_JSON" ]; then
|
||||
EXT_SIZE=$(wc -c < "$EXTERNAL_JSON")
|
||||
DB_SIZE=$(wc -c < "$DB")
|
||||
if [ "$EXT_SIZE" -gt "$DB_SIZE" ]; then
|
||||
if ! json_valid "$DB"; then
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: bieżący plik $DB jest uszkodzony, próba odtworzenia"
|
||||
|
||||
if [ "$MBACKUP" = "1" ] && [ -n "$MBACKUPATH" ] && json_valid "$EXTERNAL_JSON"; then
|
||||
logger -t easyconfig_statistics "Odtwarzanie z zewnętrznej kopii: $EXTERNAL_JSON"
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
elif [ -e "$SDB" ]; then
|
||||
TMP_GZ=/tmp/easyconfig_statistics_gz_tmp.json
|
||||
zcat "$SDB" > "$TMP_GZ" 2>/dev/null
|
||||
if json_valid "$TMP_GZ"; then
|
||||
logger -t easyconfig_statistics "Odtwarzanie z pliku gz: $SDB"
|
||||
mv "$TMP_GZ" "$DB"
|
||||
else
|
||||
logger -t easyconfig_statistics "BŁĄD: brak poprawnego źródła do odtworzenia, inicjalizuję nową bazę"
|
||||
rm -f "$TMP_GZ"
|
||||
echo "{}" > "$DB"
|
||||
fi
|
||||
else
|
||||
logger -t easyconfig_statistics "BŁĄD: brak źródła do odtworzenia, inicjalizuję nową bazę"
|
||||
echo "{}" > "$DB"
|
||||
fi
|
||||
else
|
||||
if [ "$MBACKUP" = "1" ] && [ -n "$MBACKUPATH" ] && [ -e "$EXTERNAL_JSON" ]; then
|
||||
if json_valid "$EXTERNAL_JSON"; then
|
||||
EXT_SIZE=$(wc -c < "$EXTERNAL_JSON")
|
||||
DB_SIZE=$(wc -c < "$DB")
|
||||
if [ "$EXT_SIZE" -gt "$DB_SIZE" ]; then
|
||||
cp "$EXTERNAL_JSON" "$DB"
|
||||
fi
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: zewnętrzna kopia $EXTERNAL_JSON jest uszkodzona, pomijam nadpisanie"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -103,13 +177,21 @@ else
|
||||
WRITETS=$((NOW - 1))
|
||||
fi
|
||||
if [ $WRITETS -le $NOW ]; then
|
||||
gzip -k "$DB"
|
||||
mv "$DB.gz" "$SDB"
|
||||
sync
|
||||
if json_valid "$DB"; then
|
||||
gzip -k "$DB"
|
||||
mv "$DB.gz" "$SDB"
|
||||
sync
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: $DB jest uszkodzony, pomijam zapis do archiwum gz"
|
||||
fi
|
||||
fi
|
||||
if [ "$MBACKUP" = "1" ]; then
|
||||
sleep 10
|
||||
cp "$DB" "$MBACKUPATH/easyconfig_statistics.json"
|
||||
if json_valid "$DB"; then
|
||||
cp "$DB" "$MBACKUPATH/easyconfig_statistics.json"
|
||||
else
|
||||
logger -t easyconfig_statistics "OSTRZEŻENIE: $DB jest uszkodzony, pomijam kopię zewnętrzną"
|
||||
fi
|
||||
fi
|
||||
|
||||
lock -u $LOCK
|
||||
|
||||
@@ -9,9 +9,10 @@
|
||||
// From eko.one.pl forum
|
||||
//
|
||||
|
||||
import { readfile, writefile } from "fs";
|
||||
import { readfile, writefile, rename, unlink, error } from "fs";
|
||||
|
||||
let filename = `/tmp/easyconfig_statistics.json`;
|
||||
let filename_tmp = `/tmp/easyconfig_statistics.json.tmp`;
|
||||
|
||||
let MAC = shift(ARGV);
|
||||
let IFNAME = shift(ARGV);
|
||||
@@ -43,11 +44,49 @@ let day = sprintf("%04d%02d%02d", ts.year, ts.mon, ts.mday);
|
||||
let hour = sprintf("%02d", ts.hour);
|
||||
let ts_now = sprintf("%04d%02d%02d%02d%02d", ts.year, ts.mon, ts.mday, ts.hour, ts.min);
|
||||
|
||||
function safe_write(data) {
|
||||
let serialized = sprintf("%J", data);
|
||||
if (!serialized || length(serialized) < 2) {
|
||||
warn("easyconfig_statistics.uc: błąd serializacji danych, zapis pominięty\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
let verify = null;
|
||||
try { verify = json(serialized); }
|
||||
catch { verify = null; }
|
||||
if (verify === null) {
|
||||
warn("easyconfig_statistics.uc: walidacja JSON nie powiodła się, zapis pominięty\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
let ret = writefile(filename_tmp, serialized);
|
||||
if (!ret) {
|
||||
warn("easyconfig_statistics.uc: nie można zapisać pliku tymczasowego\n");
|
||||
unlink(filename_tmp);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!rename(filename_tmp, filename)) {
|
||||
warn("easyconfig_statistics.uc: nie można zastąpić pliku docelowego (rename)\n");
|
||||
unlink(filename_tmp);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
let db = {};
|
||||
let content = readfile(filename);
|
||||
if (content) {
|
||||
try { db = json(content); }
|
||||
catch { db = {}; }
|
||||
catch {
|
||||
warn("easyconfig_statistics.uc: uszkodzony JSON w pliku bazy, resetowanie do {}\n");
|
||||
db = {};
|
||||
}
|
||||
|
||||
if (type(db) != "object" || db === null) {
|
||||
warn("easyconfig_statistics.uc: nieprawidłowy typ danych w bazie, resetowanie do {}\n");
|
||||
db = {};
|
||||
}
|
||||
}
|
||||
|
||||
let tmp = null;
|
||||
@@ -63,7 +102,7 @@ if (IFNAME == "init") {
|
||||
}
|
||||
}
|
||||
}
|
||||
writefile(filename, db);
|
||||
safe_write(db);
|
||||
exit(0)
|
||||
}
|
||||
|
||||
@@ -71,7 +110,7 @@ if (IFNAME == "delete") {
|
||||
tmp = db[MAC];
|
||||
if (tmp) {
|
||||
delete db[MAC];
|
||||
writefile(filename, db);
|
||||
safe_write(db);
|
||||
}
|
||||
exit(0)
|
||||
}
|
||||
@@ -126,7 +165,6 @@ if (CONNECTED <= 60) {
|
||||
db[MAC][IFNAME][day].total_tx = total_tx + dtx;
|
||||
db[MAC][IFNAME][day].total_rx = total_rx + drx;
|
||||
|
||||
// Dodaj statystyki godzinowe tylko jeśli był jakiś ruch danych
|
||||
if (dtx > 0 || drx > 0) {
|
||||
if (!db[MAC][IFNAME][day].hours[hour]) {
|
||||
db[MAC][IFNAME][day].hours[hour] = {
|
||||
@@ -147,5 +185,5 @@ db[MAC][IFNAME].last_rx = RX;
|
||||
db[MAC][IFNAME].last_seen = ts_now;
|
||||
db[MAC].last_seen = ts_now;
|
||||
|
||||
writefile(filename, db);
|
||||
safe_write(db);
|
||||
exit(0);
|
||||
+4
-6
@@ -18,9 +18,7 @@
|
||||
"/usr/bin/easyconfig_statistics.uc": [ "exec" ],
|
||||
"/usr/bin/easyconfig_statistics.sh": [ "exec" ],
|
||||
"/usr/bin/auto_reset_statistics.sh": [ "exec" ],
|
||||
"/sbin/transfer2cron.sh": [ "exec" ],
|
||||
"/sbin/backup2cron.sh": [ "exec" ],
|
||||
"/sbin/ar2cron.sh": [ "exec" ],
|
||||
"/etc/init.d/cron restart": [ "exec" ],
|
||||
"/tmp/easyconfig_statistics.json": [ "read" ],
|
||||
"/tmp/easyconfig_statistics_gz_tmp.json": [ "read" ],
|
||||
"/tmp/dhcp.leases": [ "read" ],
|
||||
@@ -28,6 +26,7 @@
|
||||
"/usr/lib/easyconfig/easyconfig_statistics.json": [ "read" ],
|
||||
"/var/lock/easyconfig_statistics.lock": [ "read" ],
|
||||
"/etc/config/easyconfig_transfer": [ "read" ],
|
||||
"/etc/crontabs/root": [ "read" ],
|
||||
"/mnt/easyconfig_statistics.json": [ "read" ]
|
||||
},
|
||||
"uci": [ "easyconfig_transfer" ]
|
||||
@@ -41,9 +40,7 @@
|
||||
"/usr/bin/easyconfig_statistics.uc": [ "exec" ],
|
||||
"/usr/bin/easyconfig_statistics.sh": [ "exec" ],
|
||||
"/usr/bin/auto_reset_statistics.sh": [ "exec" ],
|
||||
"/sbin/transfer2cron.sh": [ "exec" ],
|
||||
"/sbin/backup2cron.sh": [ "exec" ],
|
||||
"/sbin/ar2cron.sh": [ "exec" ],
|
||||
"/etc/init.d/cron restart": [ "exec" ],
|
||||
"/tmp/easyconfig_statistics.json": [ "write" ],
|
||||
"/tmp/easyconfig_statistics.json.gz": [ "write" ],
|
||||
"/tmp/easyconfig_statistics_gz_tmp.json": [ "write" ],
|
||||
@@ -51,6 +48,7 @@
|
||||
"/usr/lib/easyconfig/easyconfig_statistics.json": [ "write" ],
|
||||
"/var/lock/easyconfig_statistics.lock": [ "write" ],
|
||||
"/etc/config/easyconfig_transfer": [ "write" ],
|
||||
"/etc/crontabs/root": [ "write" ],
|
||||
"/mnt/easyconfig_statistics.json": [ "write" ]
|
||||
},
|
||||
"ubus": {
|
||||
|
||||
Reference in new issue
Block a user