Skip to content

Commit 0f4aa28

Browse files
committed
feat(config): monitor external changes to config.json
Automatically reload configuration if `config.json` is modified externally during runtime.
1 parent b9bcb36 commit 0f4aa28

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

config.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,46 @@ package main
33
import ("os"; "encoding/json")
44

55
type Config struct {
6-
MaxTemp int `json:"maxTemp"`
6+
MaxTemp int `json:"maxTemp"`
77
MaxFanOffTemp int `json:"maxFanOffTemp"`
88
}
99

1010
var config = Config{
11-
MaxTemp: 60,
11+
MaxTemp: 60,
1212
MaxFanOffTemp: 40,
1313
}
1414

1515
const configFile = "config.json"
16+
var configModTime int64
1617

1718
func loadConfig() {
1819
data, err := os.ReadFile(configFile)
1920
if err != nil {
2021
saveConfig()
21-
} else {
22-
json.Unmarshal(data, &config)
22+
return
2323
}
24+
json.Unmarshal(data, &config)
25+
26+
info, err := os.Stat(configFile)
27+
if err != nil { return }
28+
configModTime = info.ModTime().Unix()
2429
}
2530

2631
func saveConfig() {
2732
data, _ := json.MarshalIndent(config, "", " ")
2833
os.WriteFile(configFile, data, 0644)
34+
35+
info, err := os.Stat(configFile)
36+
if err == nil {
37+
configModTime = info.ModTime().Unix()
38+
}
39+
}
40+
41+
func reloadConfigIfChanged() {
42+
info, err := os.Stat(configFile)
43+
if err != nil { return }
44+
45+
if info.ModTime().Unix() != configModTime {
46+
loadConfig()
47+
}
2948
}

monitor.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,15 @@ func destroyADL() {
5656

5757
func start() {
5858
for {
59+
reloadConfigIfChanged()
60+
5961
temp, rpm := readGPU()
6062
if int(temp) > config.MaxFanOffTemp && rpm == 0 {
6163
alert("GPU temperature > " + fmt.Sprintf("%v", config.MaxFanOffTemp) + "°C and fan is not spinning")
6264
} else if int(temp) > config.MaxTemp {
6365
alert("GPU temperature > " + fmt.Sprintf("%v", config.MaxTemp) + "°C")
6466
}
67+
6568
time.Sleep(10 * time.Second)
6669
}
6770
}

0 commit comments

Comments
 (0)