🎄 Sync 2025-12-08 00:10:24
This commit is contained in:
@@ -10,7 +10,7 @@ LUCI_DEPENDS:=+luci-base +luci-lib-jsonc +curl +bandix
|
||||
|
||||
PKG_MAINTAINER:=timsaya
|
||||
|
||||
PKG_VERSION:=0.10.3
|
||||
PKG_VERSION:=0.11.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1021,3 +1021,57 @@ msgstr "Iniciando instalación... La página se actualizará automáticamente en
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "Por favor, borre manualmente la caché del navegador después de actualizar."
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "Estadísticas de Tráfico"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "Estadísticas de Tráfico (Solo WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "Clasificación de Uso de Dispositivos"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(Los datos tienen 1 hora de retraso)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "Fecha de Inicio"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "Fecha de Fin"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Restablecer"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "Hoy"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "Esta Semana"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "Semana Pasada"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "Este Mes"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "Mes Pasado"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "Últimos 90 Días"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "Último Año"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "Línea de Tiempo de Tráfico"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "Agregación:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "Por Hora"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "Dispositivo:"
|
||||
|
||||
@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
|
||||
msgstr "Démarrage de l'installation... La page sera actualisée automatiquement dans 5 secondes."
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "Veuillez vider manuellement le cache du navigateur après la mise à jour."
|
||||
msgstr "Veuillez vider manuellement le cache du navigateur après la mise à jour."
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "Statistiques de Trafic"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "Statistiques de Trafic (WAN uniquement)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "Classement d'Utilisation des Appareils"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(Les données ont 1 heure de retard)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "Date de Début"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "Date de Fin"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Réinitialiser"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "Aujourd'hui"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "Cette Semaine"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "Semaine Dernière"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "Ce Mois"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "Mois Dernier"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "90 Derniers Jours"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "Dernière Année"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "Chronologie du Trafic"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "Agrégation :"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "Par Heure"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "Appareil :"
|
||||
@@ -1021,3 +1021,57 @@ msgstr "Memulai instalasi... Halaman akan dimuat ulang secara otomatis dalam 5 d
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "Harap hapus cache browser secara manual setelah memperbarui."
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "Statistik Lalu Lintas"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "Statistik Lalu Lintas (Hanya WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "Peringkat Penggunaan Perangkat"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(Data memiliki penundaan 1 jam)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "Tanggal Mulai"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "Tanggal Akhir"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Setel Ulang"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "Hari Ini"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "Minggu Ini"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "Minggu Lalu"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "Bulan Ini"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "Bulan Lalu"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "90 Hari Terakhir"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "Tahun Lalu"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "Timeline Lalu Lintas"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "Agregasi:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "Per Jam"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "Perangkat:"
|
||||
|
||||
@@ -1021,3 +1021,57 @@ msgstr "インストールを開始しています... ページは5秒後に自
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "更新後、ブラウザのキャッシュを手動でクリアしてください。"
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "トラフィック統計"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "トラフィック統計(WANのみ)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "デバイス使用量ランキング"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(データは1時間遅延)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "開始日"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "終了日"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "リセット"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "今日"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "今週"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "先週"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "今月"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "先月"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "過去90日"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "過去1年"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "トラフィックタイムライン"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "集計:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "時間単位"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "デバイス:"
|
||||
|
||||
@@ -1022,3 +1022,57 @@ msgstr "Rozpoczynanie instalacji... Strona odświeży się automatycznie za 5 se
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "Po aktualizacji należy ręcznie wyczyścić pamięć podręczną przeglądarki."
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "Statystyki ruchu"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "Statystyki ruchu (tylko WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "Ranking Użycia Urządzeń"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(Dane mają 1 godzinę opóźnienia)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "Data Początkowa"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "Data Końcowa"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Resetuj"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "Dzisiaj"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "Ten Tydzień"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "Zeszły Tydzień"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "Ten Miesiąc"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "Zeszły Miesiąc"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "Ostatnie 90 Dni"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "Ostatni Rok"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "Oś Czasu Ruchu"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "Agregacja:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "Co Godzinę"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "Urządzenie:"
|
||||
|
||||
|
||||
@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
|
||||
msgstr "Начало установки... Страница автоматически обновится через 5 секунд."
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "Пожалуйста, вручную очистите кеш браузера после обновления."
|
||||
msgstr "Пожалуйста, вручную очистите кеш браузера после обновления."
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "Статистика трафика"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "Статистика трафика (только WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "Рейтинг использования устройств"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(Данные имеют задержку 1 час)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "Дата начала"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "Дата окончания"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "Сбросить"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "Сегодня"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "На этой неделе"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "На прошлой неделе"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "В этом месяце"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "В прошлом месяце"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "Последние 90 дней"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "За последний год"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "Временная шкала трафика"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "Агрегация:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "По часам"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "Устройство:"
|
||||
@@ -1021,3 +1021,57 @@ msgstr "กำลังเริ่มการติดตั้ง... หน
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "กรุณาล้างแคชเบราว์เซอร์ด้วยตนเองหลังจากอัปเดต"
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "สถิติการรับส่งข้อมูล"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "สถิติการรับส่งข้อมูล (เฉพาะ WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "อันดับการใช้งานอุปกรณ์"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(ข้อมูลล่าช้า 1 ชั่วโมง)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "วันที่เริ่มต้น"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "วันที่สิ้นสุด"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "รีเซ็ต"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "วันนี้"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "สัปดาห์นี้"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "สัปดาห์ที่แล้ว"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "เดือนนี้"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "เดือนที่แล้ว"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "90 วันล่าสุด"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "ปีที่แล้ว"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "ไทม์ไลน์การรับส่งข้อมูล"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "การรวม:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "รายชั่วโมง"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "อุปกรณ์:"
|
||||
|
||||
@@ -1026,4 +1026,58 @@ msgid "Update available"
|
||||
msgstr "有更新"
|
||||
|
||||
msgid "Update available, click to go to settings"
|
||||
msgstr "有更新,点击前往设置"
|
||||
msgstr "有更新,点击前往设置"
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "流量统计"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "流量统计(仅WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "设备用量排行"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(数据有1小时延迟)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "开始日期"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "结束日期"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "重置"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "今天"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "本周"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "上周"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "本月"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "上月"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "最近90天"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "最近一年"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "流量时间线"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "聚合方式:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "按小时"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "设备:"
|
||||
@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
|
||||
msgstr "開始安裝... 頁面將在5秒後自動重新整理。"
|
||||
|
||||
msgid "Please clear your browser cache manually after updating."
|
||||
msgstr "更新後請手動清空瀏覽器快取。"
|
||||
msgstr "更新後請手動清空瀏覽器快取。"
|
||||
|
||||
msgid "Traffic Statistics"
|
||||
msgstr "流量統計"
|
||||
|
||||
msgid "Traffic Statistics (WAN Only)"
|
||||
msgstr "流量統計(僅WAN)"
|
||||
|
||||
msgid "Device Usage Ranking"
|
||||
msgstr "設備用量排行"
|
||||
|
||||
msgid "(Data has 1 hour delay)"
|
||||
msgstr "(資料有1小時延遲)"
|
||||
|
||||
msgid "Start Date"
|
||||
msgstr "開始日期"
|
||||
|
||||
msgid "End Date"
|
||||
msgstr "結束日期"
|
||||
|
||||
msgid "Reset"
|
||||
msgstr "重置"
|
||||
|
||||
msgid "Today"
|
||||
msgstr "今天"
|
||||
|
||||
msgid "This Week"
|
||||
msgstr "本週"
|
||||
|
||||
msgid "Last Week"
|
||||
msgstr "上週"
|
||||
|
||||
msgid "This Month"
|
||||
msgstr "本月"
|
||||
|
||||
msgid "Last Month"
|
||||
msgstr "上月"
|
||||
|
||||
msgid "Last 90 Days"
|
||||
msgstr "最近90天"
|
||||
|
||||
msgid "Last Year"
|
||||
msgstr "最近一年"
|
||||
|
||||
msgid "Traffic Timeline"
|
||||
msgstr "流量時間線"
|
||||
|
||||
msgid "Aggregation:"
|
||||
msgstr "聚合方式:"
|
||||
|
||||
msgid "Hourly"
|
||||
msgstr "按小時"
|
||||
|
||||
msgid "Device:"
|
||||
msgstr "設備:"
|
||||
@@ -16,6 +16,8 @@ readonly BANDIX_CONNECTION_API="$BANDIX_API_BASE/api/connection/devices"
|
||||
readonly BANDIX_DNS_QUERIES_API="$BANDIX_API_BASE/api/dns/queries"
|
||||
readonly BANDIX_DNS_STATS_API="$BANDIX_API_BASE/api/dns/stats"
|
||||
readonly BANDIX_SCHEDULE_LIMITS_API="$BANDIX_API_BASE/api/traffic/limits/schedule"
|
||||
readonly BANDIX_TRAFFIC_USAGE_RANKING_API="$BANDIX_API_BASE/api/traffic/usage/ranking"
|
||||
readonly BANDIX_TRAFFIC_USAGE_INCREMENTS_API="$BANDIX_API_BASE/api/traffic/usage/increments"
|
||||
|
||||
# 通用函数:创建简单的JSON响应
|
||||
make_value() {
|
||||
@@ -331,6 +333,98 @@ get_dns_stats() {
|
||||
echo "$response"
|
||||
}
|
||||
|
||||
# 获取设备用量排行
|
||||
get_traffic_usage_ranking() {
|
||||
local start_ms="$1"
|
||||
local end_ms="$2"
|
||||
|
||||
# 构建查询参数(只添加非空且有效的参数)
|
||||
local query_params=""
|
||||
# 检查 start_ms 是否有效(非空且不是 "null" 或 "undefined")
|
||||
if [ -n "$start_ms" ] && [ "$start_ms" != "null" ] && [ "$start_ms" != "undefined" ]; then
|
||||
query_params="${query_params}start_ms=$start_ms&"
|
||||
fi
|
||||
# 检查 end_ms 是否有效
|
||||
if [ -n "$end_ms" ] && [ "$end_ms" != "null" ] && [ "$end_ms" != "undefined" ]; then
|
||||
query_params="${query_params}end_ms=$end_ms&"
|
||||
fi
|
||||
|
||||
# 移除末尾的 &
|
||||
query_params=$(echo "$query_params" | sed 's/&$//')
|
||||
|
||||
local url="$BANDIX_TRAFFIC_USAGE_RANKING_API"
|
||||
[ -n "$query_params" ] && url="${url}?${query_params}"
|
||||
|
||||
# 从 Bandix API 获取设备用量排行数据
|
||||
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$url" 2>/dev/null)
|
||||
|
||||
# 检查API调用是否成功
|
||||
if [ $? -ne 0 ] || [ -z "$response" ]; then
|
||||
make_error "Failed to connect to Bandix service"
|
||||
return
|
||||
fi
|
||||
|
||||
# 提取 data 部分并返回
|
||||
local data_part=$(echo "$response" | jsonfilter -e '$.data' 2>/dev/null)
|
||||
if [ -n "$data_part" ]; then
|
||||
echo "$data_part"
|
||||
else
|
||||
# 如果提取失败,返回空结果
|
||||
echo '{"start_ms":0,"end_ms":0,"total_rx_bytes":0,"total_tx_bytes":0,"total_bytes":0,"device_count":0,"rankings":[]}'
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取时间序列增量数据
|
||||
get_traffic_usage_increments() {
|
||||
local start_ms="$1"
|
||||
local end_ms="$2"
|
||||
local aggregation="$3"
|
||||
local mac="$4"
|
||||
|
||||
# 构建查询参数(只添加非空且有效的参数)
|
||||
local query_params=""
|
||||
# 检查 start_ms 是否有效(非空且不是 "null" 或 "undefined")
|
||||
if [ -n "$start_ms" ] && [ "$start_ms" != "null" ] && [ "$start_ms" != "undefined" ]; then
|
||||
query_params="${query_params}start_ms=$start_ms&"
|
||||
fi
|
||||
# 检查 end_ms 是否有效
|
||||
if [ -n "$end_ms" ] && [ "$end_ms" != "null" ] && [ "$end_ms" != "undefined" ]; then
|
||||
query_params="${query_params}end_ms=$end_ms&"
|
||||
fi
|
||||
# 检查 aggregation 是否有效
|
||||
if [ -n "$aggregation" ] && [ "$aggregation" != "null" ] && [ "$aggregation" != "undefined" ]; then
|
||||
query_params="${query_params}aggregation=$aggregation&"
|
||||
fi
|
||||
# 检查 mac 是否有效
|
||||
if [ -n "$mac" ] && [ "$mac" != "null" ] && [ "$mac" != "undefined" ]; then
|
||||
query_params="${query_params}mac=$(printf '%s' "$mac" | sed 's/ /%20/g')&"
|
||||
fi
|
||||
|
||||
# 移除末尾的 &
|
||||
query_params=$(echo "$query_params" | sed 's/&$//')
|
||||
|
||||
local url="$BANDIX_TRAFFIC_USAGE_INCREMENTS_API"
|
||||
[ -n "$query_params" ] && url="${url}?${query_params}"
|
||||
|
||||
# 从 Bandix API 获取时间序列增量数据
|
||||
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$url" 2>/dev/null)
|
||||
|
||||
# 检查API调用是否成功
|
||||
if [ $? -ne 0 ] || [ -z "$response" ]; then
|
||||
make_error "Failed to connect to Bandix service"
|
||||
return
|
||||
fi
|
||||
|
||||
# 提取 data 部分并返回
|
||||
local data_part=$(echo "$response" | jsonfilter -e '$.data' 2>/dev/null)
|
||||
if [ -n "$data_part" ]; then
|
||||
echo "$data_part"
|
||||
else
|
||||
# 如果提取失败,返回空结果
|
||||
echo '{"start_ms":0,"end_ms":0,"aggregation":"hourly","mac":"all","increments":[],"total_rx_bytes":0,"total_tx_bytes":0,"total_bytes":0}'
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取定时限速规则
|
||||
get_schedule_limits() {
|
||||
# 从 Bandix API 获取定时限速规则
|
||||
@@ -964,11 +1058,23 @@ case "$1" in
|
||||
json_add_int "page_size"
|
||||
json_close_object
|
||||
|
||||
json_add_object "getDnsStats"
|
||||
json_close_object
|
||||
json_add_object "getDnsStats"
|
||||
json_close_object
|
||||
|
||||
json_add_object "getScheduleLimits"
|
||||
json_close_object
|
||||
json_add_object "getTrafficUsageRanking"
|
||||
json_add_int "start_ms"
|
||||
json_add_int "end_ms"
|
||||
json_close_object
|
||||
|
||||
json_add_object "getTrafficUsageIncrements"
|
||||
json_add_int "start_ms"
|
||||
json_add_int "end_ms"
|
||||
json_add_string "aggregation"
|
||||
json_add_string "mac"
|
||||
json_close_object
|
||||
|
||||
json_add_object "getScheduleLimits"
|
||||
json_close_object
|
||||
|
||||
json_add_object "setScheduleLimit"
|
||||
json_add_string "mac"
|
||||
@@ -1153,6 +1259,50 @@ case "$1" in
|
||||
# logger "luci.bandix: getDnsStats called"
|
||||
get_dns_stats
|
||||
;;
|
||||
getTrafficUsageRanking)
|
||||
start_ms=""
|
||||
end_ms=""
|
||||
input=""
|
||||
if read -t 1 -r input; then
|
||||
:
|
||||
fi
|
||||
if [ -n "$input" ]; then
|
||||
start_ms="$(echo "$input" | jsonfilter -e '$[0]' 2>/dev/null)"
|
||||
[ -z "$start_ms" ] && start_ms="$(echo "$input" | jsonfilter -e '$.start_ms' 2>/dev/null)"
|
||||
end_ms="$(echo "$input" | jsonfilter -e '$[1]' 2>/dev/null)"
|
||||
[ -z "$end_ms" ] && end_ms="$(echo "$input" | jsonfilter -e '$.end_ms' 2>/dev/null)"
|
||||
else
|
||||
[ -n "$3" ] && start_ms="$3"
|
||||
[ -n "$4" ] && end_ms="$4"
|
||||
fi
|
||||
get_traffic_usage_ranking "$start_ms" "$end_ms"
|
||||
;;
|
||||
getTrafficUsageIncrements)
|
||||
start_ms=""
|
||||
end_ms=""
|
||||
aggregation=""
|
||||
mac=""
|
||||
input=""
|
||||
if read -t 1 -r input; then
|
||||
:
|
||||
fi
|
||||
if [ -n "$input" ]; then
|
||||
start_ms="$(echo "$input" | jsonfilter -e '$[0]' 2>/dev/null)"
|
||||
[ -z "$start_ms" ] && start_ms="$(echo "$input" | jsonfilter -e '$.start_ms' 2>/dev/null)"
|
||||
end_ms="$(echo "$input" | jsonfilter -e '$[1]' 2>/dev/null)"
|
||||
[ -z "$end_ms" ] && end_ms="$(echo "$input" | jsonfilter -e '$.end_ms' 2>/dev/null)"
|
||||
aggregation="$(echo "$input" | jsonfilter -e '$[2]' 2>/dev/null)"
|
||||
[ -z "$aggregation" ] && aggregation="$(echo "$input" | jsonfilter -e '$.aggregation' 2>/dev/null)"
|
||||
mac="$(echo "$input" | jsonfilter -e '$[3]' 2>/dev/null)"
|
||||
[ -z "$mac" ] && mac="$(echo "$input" | jsonfilter -e '$.mac' 2>/dev/null)"
|
||||
else
|
||||
[ -n "$3" ] && start_ms="$3"
|
||||
[ -n "$4" ] && end_ms="$4"
|
||||
[ -n "$5" ] && aggregation="$5"
|
||||
[ -n "$6" ] && mac="$6"
|
||||
fi
|
||||
get_traffic_usage_increments "$start_ms" "$end_ms" "$aggregation" "$mac"
|
||||
;;
|
||||
getScheduleLimits)
|
||||
# logger "luci.bandix: getScheduleLimits called"
|
||||
get_schedule_limits
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
"getVersion",
|
||||
"getSystemArch",
|
||||
"checkUpdate",
|
||||
"installUpdate"
|
||||
"installUpdate",
|
||||
"getTrafficUsageRanking",
|
||||
"getTrafficUsageIncrements"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
@@ -48,7 +50,9 @@
|
||||
"getVersion",
|
||||
"getSystemArch",
|
||||
"checkUpdate",
|
||||
"installUpdate"
|
||||
"installUpdate",
|
||||
"getTrafficUsageRanking",
|
||||
"getTrafficUsageIncrements"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
|
||||
@@ -138,7 +138,7 @@ o:depends("shunt_dns_mode", "2")
|
||||
o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)")
|
||||
o.datatype = "ip4addrport"
|
||||
|
||||
o = s:option(ListValue, "shunt_mosdns_dnsserver", translate("Anti-pollution DNS Server"))
|
||||
o = s:option(Value, "shunt_mosdns_dnsserver", translate("Anti-pollution DNS Server"))
|
||||
o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS"))
|
||||
o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS"))
|
||||
o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)"))
|
||||
@@ -146,7 +146,7 @@ o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.
|
||||
o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)"))
|
||||
o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS"))
|
||||
o:depends("shunt_dns_mode", "3")
|
||||
o.description = translate("Custom DNS Server for MosDNS")
|
||||
o.description = translate("Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)")
|
||||
|
||||
o = s:option(Flag, "shunt_mosdns_ipv6", translate("Disable IPv6 In MosDNS Query Mode (Shunt Mode)"))
|
||||
o:depends("shunt_dns_mode", "3")
|
||||
|
||||
@@ -161,7 +161,7 @@ o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4
|
||||
o.datatype = "ip4addrport"
|
||||
o.default = "8.8.4.4:53"
|
||||
|
||||
o = s:option(ListValue, "tunnel_forward_mosdns", translate("Anti-pollution DNS Server"))
|
||||
o = s:option(Value, "tunnel_forward_mosdns", translate("Anti-pollution DNS Server"))
|
||||
o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS"))
|
||||
o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS"))
|
||||
o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)"))
|
||||
@@ -169,7 +169,7 @@ o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.
|
||||
o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)"))
|
||||
o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS"))
|
||||
o:depends("pdnsd_enable", "4")
|
||||
o.description = translate("Custom DNS Server for MosDNS")
|
||||
o.description = translate("Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)")
|
||||
|
||||
o = s:option(Flag, "mosdns_ipv6", translate("Disable IPv6 in MOSDNS query mode"))
|
||||
o:depends("pdnsd_enable", "4")
|
||||
|
||||
@@ -73,6 +73,10 @@ if Process_list:find("tcp.udp.ssr.retcp") then
|
||||
reudp_run = 1
|
||||
end
|
||||
|
||||
if Process_list:find("nft.ssr.retcp") then
|
||||
redir_run = 1
|
||||
end
|
||||
|
||||
if Process_list:find("local.ssr.retcp") then
|
||||
redir_run = 1
|
||||
sock5_run = 1
|
||||
|
||||
@@ -416,8 +416,8 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
|
||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
|
||||
msgid "Custom DNS Server for MosDNS"
|
||||
msgstr "MosDNS 自定义 DNS 服务器"
|
||||
msgid "Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)"
|
||||
msgstr "格式为tcp://IP:Port或tls://域名:Port (tcp://8.8.8.8或tls://dns.google:853)"
|
||||
|
||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
|
||||
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
|
||||
|
||||
@@ -211,8 +211,10 @@ start_dns() {
|
||||
local run_mode="$(uci_get_by_type global run_mode)"
|
||||
|
||||
if [ "$ssrplus_dns" != "0" ]; then
|
||||
if [ -n "$dnsserver" ]; then
|
||||
add_dns_into_ipset $run_mode $dnsserver
|
||||
if command -v iptables-legacy >/dev/null 2>&1; then
|
||||
if [ -n "$dnsserver" ]; then
|
||||
add_dns_into_ipset $run_mode $dnsserver
|
||||
fi
|
||||
fi
|
||||
case "$ssrplus_dns" in
|
||||
1)
|
||||
@@ -236,12 +238,14 @@ start_dns() {
|
||||
output=$(for i in $(echo $mosdns_dnsserver | sed "s/,/ /g"); do
|
||||
dnsserver=${i%:*}
|
||||
dnsserver=${i##*/}
|
||||
add_dns_into_ipset $run_mode $dnsserver
|
||||
if command -v iptables-legacy >/dev/null 2>&1; then
|
||||
add_dns_into_ipset $run_mode $dnsserver
|
||||
fi
|
||||
echo " - addr: $i"
|
||||
echo " enable_pipeline: true"
|
||||
done)
|
||||
|
||||
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$dns_port/g" > $TMP_PATH/mosdns-config.yaml
|
||||
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$dns_port/g" | sed "s/\(concurrent:\).*/\1 $(echo "$mosdns_dnsserver" | sed 's/,/ /g' | wc -w)/g"> $TMP_PATH/mosdns-config.yaml
|
||||
if [ "$mosdns_ipv6" == "0" ]; then
|
||||
sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config.yaml
|
||||
else
|
||||
@@ -648,7 +652,7 @@ shunt_dns_command() {
|
||||
echo " socks5: \"127.0.0.1:$tmp_port\""
|
||||
echo " enable_pipeline: true"
|
||||
done)
|
||||
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$tmp_shunt_dns_port/g" > $TMP_PATH/mosdns-config-shunt.yaml
|
||||
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$tmp_shunt_dns_port/g" | sed "s/\(concurrent:\).*/\1 $(echo "$mosdns_dnsserver" | sed 's/,/ /g' | wc -w)/g" > $TMP_PATH/mosdns-config-shunt.yaml
|
||||
|
||||
if [ "$shunt_mosdns_ipv6" == "0" ]; then
|
||||
sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config-shunt.yaml
|
||||
@@ -1172,7 +1176,17 @@ load_config() {
|
||||
tcp_config_file=$TMP_PATH/tcp-only-ssr-retcp.json
|
||||
case "$UDP_RELAY_SERVER" in
|
||||
nil)
|
||||
mode="tcp"
|
||||
if command -v nft >/dev/null 2>&1; then
|
||||
# nftables / fw4
|
||||
mode="tcp,udp"
|
||||
ARG_UDP=""
|
||||
udp_config_file=""
|
||||
UDP_RELAY_SERVER="nil"
|
||||
tcp_config_file=$TMP_PATH/nft-ssr-retcp.json
|
||||
else
|
||||
# iptables / fw3
|
||||
mode="tcp"
|
||||
fi
|
||||
;;
|
||||
$GLOBAL_SERVER | same)
|
||||
mode="tcp,udp"
|
||||
@@ -1185,7 +1199,13 @@ load_config() {
|
||||
udp_config_file=$TMP_PATH/udp-only-ssr-reudp.json
|
||||
ARG_UDP="-U"
|
||||
start_udp
|
||||
mode="tcp"
|
||||
if command -v nft >/dev/null 2>&1; then
|
||||
# nftables / fw4
|
||||
mode="tcp,udp"
|
||||
else
|
||||
# iptables / fw3
|
||||
mode="tcp"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
case "$LOCAL_SERVER" in
|
||||
@@ -1419,6 +1439,11 @@ start_rules() {
|
||||
2) echo "-O" ;;
|
||||
esac
|
||||
}
|
||||
if command -v nft >/dev/null 2>&1; then
|
||||
ARG_A="-A"
|
||||
else
|
||||
ARG_A=""
|
||||
fi
|
||||
/usr/share/shadowsocksr/gfw2ipset.sh
|
||||
/usr/bin/ssr-rules \
|
||||
-s "$server" \
|
||||
@@ -1438,7 +1463,8 @@ start_rules() {
|
||||
-N "$shunt_ip" \
|
||||
-M "$(uci_get_by_type global netflix_proxy 0)" \
|
||||
-I "/etc/ssrplus/netflixip.list" \
|
||||
$(get_arg_out) $(gfwmode) $ARG_UDP
|
||||
$(get_arg_out) $(gfwmode) $ARG_UDP $ARG_A
|
||||
|
||||
return $?
|
||||
}
|
||||
|
||||
@@ -1486,6 +1512,13 @@ boot() {
|
||||
stop() {
|
||||
unlock
|
||||
set_lock
|
||||
if command -v nft >/dev/null 2>&1; then
|
||||
/usr/bin/ssr-rules -K
|
||||
#local CLEANUP_PERSISTENCE="$(uci_get_by_type global global_server nil)"
|
||||
#if [ "$CLEANUP_PERSISTENCE" == "nil" ]; then
|
||||
# /usr/bin/ssr-rules -X
|
||||
#fi
|
||||
fi
|
||||
/usr/bin/ssr-rules -f
|
||||
local srulecount=0
|
||||
if command -v nft >/dev/null 2>&1; then
|
||||
@@ -1527,6 +1560,7 @@ stop() {
|
||||
killall -q -9 kcptun-client
|
||||
fi
|
||||
$PS -w | grep -v "grep" | grep ssr-monitor | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
|
||||
$PS -w | grep -v "grep" | grep ssr-rules | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
|
||||
$PS -w | grep -v "grep" | grep "sleep 0000" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
|
||||
( \
|
||||
# Graceful kill first, so programs have the chance to stop its subprocesses
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -213,7 +213,9 @@ local function update(url, file, type, file2)
|
||||
if type == "gfw_data" or type == "ad_data" then
|
||||
luci.sys.call("/usr/share/shadowsocksr/gfw2ipset.sh")
|
||||
else
|
||||
luci.sys.call("/usr/share/shadowsocksr/chinaipset.sh " .. TMP_PATH .. "/china_ssr.txt")
|
||||
if luci.sys.call("command -v ipset >/dev/null 2>&1") == 0 then
|
||||
luci.sys.call("/usr/share/shadowsocksr/chinaipset.sh " .. TMP_PATH .. "/china_ssr.txt")
|
||||
end
|
||||
end
|
||||
if args then
|
||||
log(0, tonumber(icount) / Num)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<html lang="{{ dispatcher.lang }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{{ striptags(`${boardinfo.hostname ?? '?'}${node ? ` - ${node.title}` : ''}`) }} - LuCI</title>
|
||||
<title>{{ striptags(`${dispatched ? `${dispatched.title} - ` : ''}${boardinfo.hostname ?? '?'}`) }}</title>
|
||||
<script>
|
||||
const setTheme = (theme) => {
|
||||
const current = ['light', 'dark', 'device'].includes(theme) ? theme : 'device';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bandix
|
||||
PKG_VERSION:=0.10.3
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=0.11.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_MAINTAINER:=timsaya
|
||||
@@ -13,7 +13,7 @@ include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
|
||||
|
||||
# 二进制文件的文件名和URL
|
||||
RUST_BANDIX_VERSION:=0.10.3
|
||||
RUST_BANDIX_VERSION:=0.11.0
|
||||
RUST_BINARY_FILENAME:=bandix-$(RUST_BANDIX_VERSION)-$(RUSTC_TARGET_ARCH).tar.gz
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user