tabby-group-server-stats 1.7.2 → 1.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/presets.json CHANGED
@@ -193,10 +193,10 @@
193
193
  "en": "GPU memory",
194
194
  "zh": "GPU 显存"
195
195
  },
196
- "description": "总显存使用率;悬停显示剩余/总显存(GiB)。",
196
+ "description": "总显存使用率;悬停显示剩余/总显存(GB)。",
197
197
  "descriptions": {
198
- "en": "Total VRAM usage percentage; hover for free/total GiB.",
199
- "zh": "总显存使用率;悬停显示剩余/总显存(GiB)。"
198
+ "en": "Total VRAM usage percentage; hover for free/total GB.",
199
+ "zh": "总显存使用率;悬停显示剩余/总显存(GB)。"
200
200
  },
201
201
  "metric": {
202
202
  "id": "single-gpu-memory",
@@ -208,7 +208,7 @@
208
208
  "interval": 20,
209
209
  "timeout": 60,
210
210
  "command": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
211
- "detailCommand": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
211
+ "detailCommand": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
212
212
  "checkCommand": "tabby_gpu_exists() { gpu_data=$(nvidia-smi \"$@\" --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || return 1; printf '%s\\n' \"$gpu_data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 ~ /^[0-9]+$/) found=1} END {exit !found}'; }; tabby_gpu_exists || (for gpu_index in 0 1 2 3 4 5 6 7; do tabby_gpu_exists --id=\"$gpu_index\" && exit 0; done; exit 1)",
213
213
  "checkMode": "exitCode",
214
214
  "checkExpected": "0",
@@ -233,7 +233,7 @@
233
233
  }
234
234
  },
235
235
  "source": {
236
- "name": "Tabby Group Server Stats",
236
+ "name": "lishuainan0209 / Tabby Group Server Stats",
237
237
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
238
238
  "license": "MIT"
239
239
  }
@@ -465,11 +465,11 @@
465
465
  },
466
466
  "description": "显存使用率;悬停显示剩余/总显存。自动隐藏不存在的 GPU 0–7。",
467
467
  "descriptions": {
468
- "en": "VRAM use percentage; hover for free/total GiB. Missing GPUs 0–7 are hidden.",
469
- "zh": "显存使用率;悬停显示剩余/总显存(GiB)。自动隐藏不存在的 GPU 0–7。"
468
+ "en": "VRAM use percentage; hover for free/total GB. Missing GPUs 0–7 are hidden.",
469
+ "zh": "显存使用率;悬停显示剩余/总显存(GB)。自动隐藏不存在的 GPU 0–7。"
470
470
  },
471
471
  "source": {
472
- "name": "Tabby Group Server Stats",
472
+ "name": "lishuainan0209 / Tabby Group Server Stats",
473
473
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
474
474
  "license": "MIT"
475
475
  },
@@ -493,7 +493,7 @@
493
493
  "interval": 20,
494
494
  "timeout": 60,
495
495
  "command": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
496
- "detailCommand": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
496
+ "detailCommand": "tabby_gpu_value() { printf '%s\\n' \"$1\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'; }; if gpu_data=$(nvidia-smi --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) && tabby_gpu_value \"$gpu_data\"; then :; else gpu_data=$(for gpu_index in 0 1 2 3 4 5 6 7; do gpu_row=$(nvidia-smi --id=\"$gpu_index\" --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || continue; tabby_gpu_value \"$gpu_row\" >/dev/null && printf '%s\\n' \"$gpu_row\"; done); tabby_gpu_value \"$gpu_data\"; fi",
497
497
  "checkCommand": "tabby_gpu_exists() { gpu_data=$(nvidia-smi \"$@\" --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || return 1; printf '%s\\n' \"$gpu_data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 ~ /^[0-9]+$/) found=1} END {exit !found}'; }; tabby_gpu_exists || (for gpu_index in 0 1 2 3 4 5 6 7; do tabby_gpu_exists --id=\"$gpu_index\" && exit 0; done; exit 1)",
498
498
  "checkMode": "exitCode",
499
499
  "checkExpected": "0",
@@ -524,7 +524,7 @@
524
524
  "interval": 20,
525
525
  "timeout": 60,
526
526
  "command": "data=$(nvidia-smi --id=0 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
527
- "detailCommand": "data=$(nvidia-smi --id=0 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
527
+ "detailCommand": "data=$(nvidia-smi --id=0 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
528
528
  "checkCommand": "data=$(nvidia-smi --id=0 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"0\") found=1} END {exit !found}'",
529
529
  "checkMode": "exitCode",
530
530
  "checkExpected": "0",
@@ -554,7 +554,7 @@
554
554
  "interval": 20,
555
555
  "timeout": 60,
556
556
  "command": "data=$(nvidia-smi --id=1 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
557
- "detailCommand": "data=$(nvidia-smi --id=1 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
557
+ "detailCommand": "data=$(nvidia-smi --id=1 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
558
558
  "checkCommand": "data=$(nvidia-smi --id=1 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"1\") found=1} END {exit !found}'",
559
559
  "checkMode": "exitCode",
560
560
  "checkExpected": "0",
@@ -584,7 +584,7 @@
584
584
  "interval": 20,
585
585
  "timeout": 60,
586
586
  "command": "data=$(nvidia-smi --id=2 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
587
- "detailCommand": "data=$(nvidia-smi --id=2 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
587
+ "detailCommand": "data=$(nvidia-smi --id=2 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
588
588
  "checkCommand": "data=$(nvidia-smi --id=2 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"2\") found=1} END {exit !found}'",
589
589
  "checkMode": "exitCode",
590
590
  "checkExpected": "0",
@@ -614,7 +614,7 @@
614
614
  "interval": 20,
615
615
  "timeout": 60,
616
616
  "command": "data=$(nvidia-smi --id=3 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
617
- "detailCommand": "data=$(nvidia-smi --id=3 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
617
+ "detailCommand": "data=$(nvidia-smi --id=3 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
618
618
  "checkCommand": "data=$(nvidia-smi --id=3 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"3\") found=1} END {exit !found}'",
619
619
  "checkMode": "exitCode",
620
620
  "checkExpected": "0",
@@ -644,7 +644,7 @@
644
644
  "interval": 20,
645
645
  "timeout": 60,
646
646
  "command": "data=$(nvidia-smi --id=4 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
647
- "detailCommand": "data=$(nvidia-smi --id=4 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
647
+ "detailCommand": "data=$(nvidia-smi --id=4 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
648
648
  "checkCommand": "data=$(nvidia-smi --id=4 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"4\") found=1} END {exit !found}'",
649
649
  "checkMode": "exitCode",
650
650
  "checkExpected": "0",
@@ -674,7 +674,7 @@
674
674
  "interval": 20,
675
675
  "timeout": 60,
676
676
  "command": "data=$(nvidia-smi --id=5 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
677
- "detailCommand": "data=$(nvidia-smi --id=5 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
677
+ "detailCommand": "data=$(nvidia-smi --id=5 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
678
678
  "checkCommand": "data=$(nvidia-smi --id=5 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"5\") found=1} END {exit !found}'",
679
679
  "checkMode": "exitCode",
680
680
  "checkExpected": "0",
@@ -704,7 +704,7 @@
704
704
  "interval": 20,
705
705
  "timeout": 60,
706
706
  "command": "data=$(nvidia-smi --id=6 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
707
- "detailCommand": "data=$(nvidia-smi --id=6 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
707
+ "detailCommand": "data=$(nvidia-smi --id=6 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
708
708
  "checkCommand": "data=$(nvidia-smi --id=6 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"6\") found=1} END {exit !found}'",
709
709
  "checkMode": "exitCode",
710
710
  "checkExpected": "0",
@@ -734,7 +734,7 @@
734
734
  "interval": 20,
735
735
  "timeout": 60,
736
736
  "command": "data=$(nvidia-smi --id=7 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%d\\n\",used*100/total}'",
737
- "detailCommand": "data=$(nvidia-smi --id=7 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",free/1024,total/1024}'",
737
+ "detailCommand": "data=$(nvidia-smi --id=7 --query-gpu=memory.used,memory.total,memory.free --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk -F, 'NF { if(NF!=3) {bad=1; next} for(i=1;i<=3;i++) {gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$i); if($i !~ /^[0-9]+([.][0-9]+)?$/) bad=1} if($2<=0) bad=1; used+=$1; total+=$2; free+=$3; count++ } END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",free/1024,total/1024}'",
738
738
  "checkCommand": "data=$(nvidia-smi --id=7 --query-gpu=index --format=csv,noheader,nounits 2>/dev/null) || exit 1; printf '%s\\n' \"$data\" | awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,\"\",$0); if($0 == \"7\") found=1} END {exit !found}'",
739
739
  "checkMode": "exitCode",
740
740
  "checkExpected": "0",
@@ -773,7 +773,7 @@
773
773
  "type": "text",
774
774
  "icon": "stats-disk-space",
775
775
  "color": "#00ff00",
776
- "suffix": " GiB",
776
+ "suffix": " GB",
777
777
  "interval": 20,
778
778
  "timeout": 60,
779
779
  "checkCommand": "",
@@ -783,7 +783,7 @@
783
783
  "showWhenUnavailable": true,
784
784
  "visibleWhenUnavailable": true,
785
785
  "command": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
786
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
786
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
787
787
  "colorRules": [
788
788
  {
789
789
  "operator": "<",
@@ -804,7 +804,7 @@
804
804
  "type": "text",
805
805
  "icon": "stats-system-disk",
806
806
  "color": "#00ff00",
807
- "suffix": " GiB",
807
+ "suffix": " GB",
808
808
  "interval": 20,
809
809
  "timeout": 60,
810
810
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -814,7 +814,7 @@
814
814
  "showWhenUnavailable": true,
815
815
  "visibleWhenUnavailable": true,
816
816
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
817
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
817
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
818
818
  "colorRules": [
819
819
  {
820
820
  "operator": "<",
@@ -834,7 +834,7 @@
834
834
  "type": "text",
835
835
  "icon": "stats-data-disk",
836
836
  "color": "#00ff00",
837
- "suffix": " GiB",
837
+ "suffix": " GB",
838
838
  "interval": 20,
839
839
  "timeout": 60,
840
840
  "checkCommand": "mountpoint -q -- '/data'",
@@ -844,7 +844,7 @@
844
844
  "showWhenUnavailable": true,
845
845
  "visibleWhenUnavailable": true,
846
846
  "command": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
847
- "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
847
+ "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
848
848
  "colorRules": [
849
849
  {
850
850
  "operator": "<",
@@ -865,7 +865,7 @@
865
865
  }
866
866
  },
867
867
  "source": {
868
- "name": "Tabby Group Server Stats",
868
+ "name": "lishuainan0209 / Tabby Group Server Stats",
869
869
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
870
870
  "license": "MIT"
871
871
  },
@@ -896,7 +896,7 @@
896
896
  "type": "text",
897
897
  "icon": "stats-disk-space",
898
898
  "color": "#00ff00",
899
- "suffix": " GiB",
899
+ "suffix": " GB",
900
900
  "interval": 20,
901
901
  "timeout": 60,
902
902
  "checkCommand": "",
@@ -906,7 +906,7 @@
906
906
  "showWhenUnavailable": true,
907
907
  "visibleWhenUnavailable": true,
908
908
  "command": "_disk_rows=$(\nfor _disk_path in '/'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
909
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
909
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
910
910
  "colorRules": [
911
911
  {
912
912
  "operator": "<",
@@ -927,7 +927,7 @@
927
927
  "type": "text",
928
928
  "icon": "stats-system-disk",
929
929
  "color": "#00ff00",
930
- "suffix": " GiB",
930
+ "suffix": " GB",
931
931
  "interval": 20,
932
932
  "timeout": 60,
933
933
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -937,7 +937,7 @@
937
937
  "showWhenUnavailable": true,
938
938
  "visibleWhenUnavailable": true,
939
939
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
940
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
940
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
941
941
  "colorRules": [
942
942
  {
943
943
  "operator": "<",
@@ -958,7 +958,7 @@
958
958
  }
959
959
  },
960
960
  "source": {
961
- "name": "Tabby Group Server Stats",
961
+ "name": "lishuainan0209 / Tabby Group Server Stats",
962
962
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
963
963
  "license": "MIT"
964
964
  },
@@ -992,7 +992,7 @@
992
992
  "type": "text",
993
993
  "icon": "stats-disk-space",
994
994
  "color": "#00ff00",
995
- "suffix": " GiB",
995
+ "suffix": " GB",
996
996
  "interval": 20,
997
997
  "timeout": 60,
998
998
  "checkCommand": "",
@@ -1002,7 +1002,7 @@
1002
1002
  "showWhenUnavailable": true,
1003
1003
  "visibleWhenUnavailable": true,
1004
1004
  "command": "_disk_rows=$(\nfor _disk_path in '/' '/public'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
1005
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/public'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
1005
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/public'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
1006
1006
  "colorRules": [
1007
1007
  {
1008
1008
  "operator": "<",
@@ -1023,7 +1023,7 @@
1023
1023
  "type": "text",
1024
1024
  "icon": "stats-system-disk",
1025
1025
  "color": "#00ff00",
1026
- "suffix": " GiB",
1026
+ "suffix": " GB",
1027
1027
  "interval": 20,
1028
1028
  "timeout": 60,
1029
1029
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -1033,7 +1033,7 @@
1033
1033
  "showWhenUnavailable": true,
1034
1034
  "visibleWhenUnavailable": true,
1035
1035
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1036
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1036
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1037
1037
  "colorRules": [
1038
1038
  {
1039
1039
  "operator": "<",
@@ -1053,7 +1053,7 @@
1053
1053
  "type": "text",
1054
1054
  "icon": "stats-data-disk",
1055
1055
  "color": "#00ff00",
1056
- "suffix": " GiB",
1056
+ "suffix": " GB",
1057
1057
  "interval": 20,
1058
1058
  "timeout": 60,
1059
1059
  "checkCommand": "mountpoint -q -- '/public'",
@@ -1063,7 +1063,7 @@
1063
1063
  "showWhenUnavailable": true,
1064
1064
  "visibleWhenUnavailable": true,
1065
1065
  "command": "data=$(df -Pk -- '/public' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1066
- "detailCommand": "data=$(df -Pk -- '/public' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1066
+ "detailCommand": "data=$(df -Pk -- '/public' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1067
1067
  "colorRules": [
1068
1068
  {
1069
1069
  "operator": "<",
@@ -1084,7 +1084,7 @@
1084
1084
  }
1085
1085
  },
1086
1086
  "source": {
1087
- "name": "Tabby Group Server Stats",
1087
+ "name": "lishuainan0209 / Tabby Group Server Stats",
1088
1088
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
1089
1089
  "license": "MIT"
1090
1090
  },
@@ -1118,7 +1118,7 @@
1118
1118
  "type": "text",
1119
1119
  "icon": "stats-disk-space",
1120
1120
  "color": "#00ff00",
1121
- "suffix": " GiB",
1121
+ "suffix": " GB",
1122
1122
  "interval": 20,
1123
1123
  "timeout": 60,
1124
1124
  "checkCommand": "",
@@ -1128,7 +1128,7 @@
1128
1128
  "showWhenUnavailable": true,
1129
1129
  "visibleWhenUnavailable": true,
1130
1130
  "command": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
1131
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
1131
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
1132
1132
  "colorRules": [
1133
1133
  {
1134
1134
  "operator": "<",
@@ -1149,7 +1149,7 @@
1149
1149
  "type": "text",
1150
1150
  "icon": "stats-system-disk",
1151
1151
  "color": "#00ff00",
1152
- "suffix": " GiB",
1152
+ "suffix": " GB",
1153
1153
  "interval": 20,
1154
1154
  "timeout": 60,
1155
1155
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -1159,7 +1159,7 @@
1159
1159
  "showWhenUnavailable": true,
1160
1160
  "visibleWhenUnavailable": true,
1161
1161
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1162
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1162
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1163
1163
  "colorRules": [
1164
1164
  {
1165
1165
  "operator": "<",
@@ -1179,7 +1179,7 @@
1179
1179
  "type": "text",
1180
1180
  "icon": "stats-data-disk",
1181
1181
  "color": "#00ff00",
1182
- "suffix": " GiB",
1182
+ "suffix": " GB",
1183
1183
  "interval": 20,
1184
1184
  "timeout": 60,
1185
1185
  "checkCommand": "mountpoint -q -- '/data'",
@@ -1189,7 +1189,7 @@
1189
1189
  "showWhenUnavailable": true,
1190
1190
  "visibleWhenUnavailable": true,
1191
1191
  "command": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1192
- "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1192
+ "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1193
1193
  "colorRules": [
1194
1194
  {
1195
1195
  "operator": "<",
@@ -1210,7 +1210,7 @@
1210
1210
  }
1211
1211
  },
1212
1212
  "source": {
1213
- "name": "Tabby Group Server Stats",
1213
+ "name": "lishuainan0209 / Tabby Group Server Stats",
1214
1214
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
1215
1215
  "license": "MIT"
1216
1216
  },
@@ -1241,7 +1241,7 @@
1241
1241
  "type": "text",
1242
1242
  "icon": "stats-disk-space",
1243
1243
  "color": "#00ff00",
1244
- "suffix": " GiB",
1244
+ "suffix": " GB",
1245
1245
  "interval": 20,
1246
1246
  "timeout": 60,
1247
1247
  "checkCommand": "",
@@ -1251,7 +1251,7 @@
1251
1251
  "showWhenUnavailable": true,
1252
1252
  "visibleWhenUnavailable": true,
1253
1253
  "command": "_disk_rows=$(\nfor _disk_path in '/' '/data' '/lsn_disk1'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
1254
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data' '/lsn_disk1'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
1254
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data' '/lsn_disk1'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
1255
1255
  "colorRules": [
1256
1256
  {
1257
1257
  "operator": "<",
@@ -1272,7 +1272,7 @@
1272
1272
  "type": "text",
1273
1273
  "icon": "stats-system-disk",
1274
1274
  "color": "#00ff00",
1275
- "suffix": " GiB",
1275
+ "suffix": " GB",
1276
1276
  "interval": 20,
1277
1277
  "timeout": 60,
1278
1278
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -1282,7 +1282,7 @@
1282
1282
  "showWhenUnavailable": true,
1283
1283
  "visibleWhenUnavailable": true,
1284
1284
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1285
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1285
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1286
1286
  "colorRules": [
1287
1287
  {
1288
1288
  "operator": "<",
@@ -1302,7 +1302,7 @@
1302
1302
  "type": "text",
1303
1303
  "icon": "stats-data-disk",
1304
1304
  "color": "#00ff00",
1305
- "suffix": " GiB",
1305
+ "suffix": " GB",
1306
1306
  "interval": 20,
1307
1307
  "timeout": 60,
1308
1308
  "checkCommand": "mountpoint -q -- '/data'",
@@ -1312,7 +1312,7 @@
1312
1312
  "showWhenUnavailable": true,
1313
1313
  "visibleWhenUnavailable": true,
1314
1314
  "command": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1315
- "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1315
+ "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1316
1316
  "colorRules": [
1317
1317
  {
1318
1318
  "operator": "<",
@@ -1332,7 +1332,7 @@
1332
1332
  "type": "text",
1333
1333
  "icon": "stats-data-disk",
1334
1334
  "color": "#00ff00",
1335
- "suffix": " GiB",
1335
+ "suffix": " GB",
1336
1336
  "interval": 20,
1337
1337
  "timeout": 60,
1338
1338
  "checkCommand": "mountpoint -q -- '/lsn_disk1'",
@@ -1342,7 +1342,7 @@
1342
1342
  "showWhenUnavailable": true,
1343
1343
  "visibleWhenUnavailable": true,
1344
1344
  "command": "data=$(df -Pk -- '/lsn_disk1' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1345
- "detailCommand": "data=$(df -Pk -- '/lsn_disk1' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1345
+ "detailCommand": "data=$(df -Pk -- '/lsn_disk1' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1346
1346
  "colorRules": [
1347
1347
  {
1348
1348
  "operator": "<",
@@ -1363,7 +1363,7 @@
1363
1363
  }
1364
1364
  },
1365
1365
  "source": {
1366
- "name": "Tabby Group Server Stats",
1366
+ "name": "lishuainan0209 / Tabby Group Server Stats",
1367
1367
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
1368
1368
  "license": "MIT"
1369
1369
  },
@@ -1394,7 +1394,7 @@
1394
1394
  "type": "text",
1395
1395
  "icon": "stats-disk-space",
1396
1396
  "color": "#00ff00",
1397
- "suffix": " GiB",
1397
+ "suffix": " GB",
1398
1398
  "interval": 20,
1399
1399
  "timeout": 60,
1400
1400
  "checkCommand": "",
@@ -1404,7 +1404,7 @@
1404
1404
  "showWhenUnavailable": true,
1405
1405
  "visibleWhenUnavailable": true,
1406
1406
  "command": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.0f\\n\",int(available/1048576)}'",
1407
- "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GiB\\n\",available/1048576,total/1048576}'",
1407
+ "detailCommand": "_disk_rows=$(\nfor _disk_path in '/' '/data'; do\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n _disk_device=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n case \"$_disk_device\" in ''|*[!0-9]*) continue;; esac\n _disk_data=$(df -Pk -- \"$_disk_path\" 2>/dev/null) || continue\n _disk_values=$(printf '%s\\n' \"$_disk_data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || continue\n _disk_current=$(stat -Lc '%d' -- \"$_disk_path\" 2>/dev/null) || continue\n [ \"$_disk_device\" = \"$_disk_current\" ] || continue\n if [ \"$_disk_path\" != / ]; then mountpoint -q -- \"$_disk_path\" 2>/dev/null || continue; fi\n printf '%s %s\\n' \"$_disk_device\" \"$_disk_values\"\ndone\n)\nprintf '%s\\n' \"$_disk_rows\" | awk 'NF {if(NF!=3 || $1 !~ /^[0-9]+$/ || $2 !~ /^[0-9]+$/ || $3 !~ /^[0-9]+$/ || $2<=0 || $3>$2) {bad=1; next} if(!seen[$1]++) {total+=$2; available+=$3; count++}} END {if(bad || !count || total<=0) exit 1; printf \"%.1f/%.1f GB\\n\",available/1048576,total/1048576}'",
1408
1408
  "colorRules": [
1409
1409
  {
1410
1410
  "operator": "<",
@@ -1425,7 +1425,7 @@
1425
1425
  "type": "text",
1426
1426
  "icon": "stats-system-disk",
1427
1427
  "color": "#00ff00",
1428
- "suffix": " GiB",
1428
+ "suffix": " GB",
1429
1429
  "interval": 20,
1430
1430
  "timeout": 60,
1431
1431
  "checkCommand": "test -d '/' && df -Pk -- '/' >/dev/null 2>&1",
@@ -1435,7 +1435,7 @@
1435
1435
  "showWhenUnavailable": true,
1436
1436
  "visibleWhenUnavailable": true,
1437
1437
  "command": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1438
- "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1438
+ "detailCommand": "data=$(df -Pk -- '/' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1439
1439
  "colorRules": [
1440
1440
  {
1441
1441
  "operator": "<",
@@ -1455,7 +1455,7 @@
1455
1455
  "type": "text",
1456
1456
  "icon": "stats-data-disk",
1457
1457
  "color": "#00ff00",
1458
- "suffix": " GiB",
1458
+ "suffix": " GB",
1459
1459
  "interval": 20,
1460
1460
  "timeout": 60,
1461
1461
  "checkCommand": "mountpoint -q -- '/data'",
@@ -1465,7 +1465,7 @@
1465
1465
  "showWhenUnavailable": true,
1466
1466
  "visibleWhenUnavailable": true,
1467
1467
  "command": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.0f\\n\",int($2/1048576)}'",
1468
- "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GiB\\n\",$2/1048576,$1/1048576}'",
1468
+ "detailCommand": "data=$(df -Pk -- '/data' 2>/dev/null) || exit 1; values=$(printf '%s\\n' \"$data\" | awk 'NR==2 {if(NF<6 || $2 !~ /^[0-9]+$/ || $4 !~ /^[0-9]+$/ || $2<=0 || $4>$2) bad=1; else {total=$2; available=$4; found=1}} NR>2 && NF {bad=1} END {if(bad || !found) exit 1; printf \"%.0f %.0f\\n\",total,available}') || exit 1; printf '%s\\n' \"$values\" | awk '{printf \"%.1f/%.1f GB\\n\",$2/1048576,$1/1048576}'",
1469
1469
  "colorRules": [
1470
1470
  {
1471
1471
  "operator": "<",
@@ -1486,7 +1486,7 @@
1486
1486
  }
1487
1487
  },
1488
1488
  "source": {
1489
- "name": "Tabby Group Server Stats",
1489
+ "name": "lishuainan0209 / Tabby Group Server Stats",
1490
1490
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
1491
1491
  "license": "MIT"
1492
1492
  },
@@ -1515,7 +1515,7 @@
1515
1515
  "zh": "线程数与按处理器数量归一化的 1 分钟、5 分钟负载。"
1516
1516
  },
1517
1517
  "source": {
1518
- "name": "Tabby Group Server Stats",
1518
+ "name": "lishuainan0209 / Tabby Group Server Stats",
1519
1519
  "url": "https://github.com/lishuainan0209/tabby-group-server-stats",
1520
1520
  "license": "MIT"
1521
1521
  },