New scripts
Deploy / deploy (push) Successful in 8s

This commit is contained in:
2026-08-29 14:41:40 +05:00
parent 3f400694d8
commit e4f58e820f
4 changed files with 38 additions and 3 deletions
+12 -2
View File
@@ -1,11 +1,21 @@
links: links:
- { name: Proxmox, url: "https://pve.local:8006" } - { name: Gitea, url: "https://git.alexey-homelab.duckdns.org" }
- { name: Router, url: "http://192.168.1.1" } - { name: Files, url: "https://files.alexey-homelab.duckdns.org/files/srv/" }
- { name: MinePanel, url: "https://mc.alexey-homelab.duckdns.org"}
- { name: PullMD, url: "https://pullmd.alexey-homelab.duckdns.org" }
monitor: monitor:
- name: cpu - name: cpu
script: scripts/cpu.sh script: scripts/cpu.sh
refresh: 5 refresh: 5
data: percentage data: percentage
- name: disk
script: scripts/disk.sh
refresh: 60
data: percentage
- name: mem
script: scripts/mem.sh
refresh: 5
data: percentage
exec: exec:
- name: greet - name: greet
script: scripts/greet.sh script: scripts/greet.sh
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
# Заполненность корневого раздела в процентах (linux + mac).
case "$(uname)" in
Darwin) df -k / | awk 'NR==2 {print $5}' | tr -d '%' ;;
*) df -Pk / | awk 'NR==2 {print $5}' | tr -d '%' ;;
esac
Executable
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
# Заполненность RAM в процентах: ps %mem — уже доля от общей памяти, суммируем как есть (mac + linux).
ps -A -o %mem | awk '{s+=$1} END {printf "%d", s}'
+17 -1
View File
@@ -56,6 +56,21 @@ func loadConfig(path string) (*Config, error) {
if err := dec.Decode(&cfg); err != nil { if err := dec.Decode(&cfg); err != nil {
return nil, fmt.Errorf("parse %s: %w", path, err) return nil, fmt.Errorf("parse %s: %w", path, err)
} }
seen := map[string]bool{} // item names are global keys (monVals, RunScript)
for _, l := range cfg.Links {
if seen[l.Name] {
return nil, fmt.Errorf("duplicate name %q", l.Name)
}
seen[l.Name] = true
}
for _, list := range [][]Item{cfg.Monitor, cfg.Exec} {
for _, it := range list {
if seen[it.Name] {
return nil, fmt.Errorf("duplicate name %q", it.Name)
}
seen[it.Name] = true
}
}
for _, it := range cfg.Monitor { for _, it := range cfg.Monitor {
if it.Refresh <= 0 { if it.Refresh <= 0 {
return nil, fmt.Errorf("monitor %q: refresh must be > 0", it.Name) return nil, fmt.Errorf("monitor %q: refresh must be > 0", it.Name)
@@ -109,7 +124,8 @@ func (s *server) startMonitors() {
log.Printf("monitor %s: %v", sc.Name, err) log.Printf("monitor %s: %v", sc.Name, err)
v = "error: " + err.Error() v = "error: " + err.Error()
} else { } else {
log.Printf("monitor %s -> %s", sc.Name, strings.TrimSpace(v)) v = strings.TrimSpace(v)
log.Printf("monitor %s -> %s", sc.Name, v)
} }
s.monVals.Store(sc.Name, v) s.monVals.Store(sc.Name, v)
time.Sleep(time.Duration(sc.Refresh) * time.Second) time.Sleep(time.Duration(sc.Refresh) * time.Second)