Files
kattila.status/agent/config/config.go
2026-04-17 19:23:04 +03:00

88 lines
1.5 KiB
Go

package config
import (
"crypto/rand"
"encoding/hex"
"log"
"os"
"strings"
)
type Config struct {
DNS string
ManagerURL string
AgentPort string
AgentID string
}
var Cfg *Config
func init() {
Cfg = &Config{
AgentPort: "5087", // default
}
}
func LoadConfig() {
paths := []string{".env", "../.env"}
for _, p := range paths {
content, err := os.ReadFile(p)
if err == nil {
parseEnv(string(content))
break
}
}
if h := os.Getenv("MANAGER_URL"); h != "" {
Cfg.ManagerURL = h
}
if Cfg.ManagerURL == "" {
Cfg.ManagerURL = "http://localhost:5086" // Default
}
if d := os.Getenv("DNS"); d != "" {
Cfg.DNS = d
}
loadOrGenerateAgentID()
}
func parseEnv(content string) {
lines := strings.Split(content, "\n")
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
parts := strings.SplitN(line, "=", 2)
if len(parts) == 2 {
os.Setenv(parts[0], parts[1])
}
}
}
func loadOrGenerateAgentID() {
path := "agent_id.txt"
data, err := os.ReadFile(path)
if err == nil {
Cfg.AgentID = strings.TrimSpace(string(data))
if Cfg.AgentID != "" {
return
}
}
// Generate new AgentID
b := make([]byte, 8)
rand.Read(b)
Cfg.AgentID = "agent-" + hex.EncodeToString(b)
err = os.WriteFile(path, []byte(Cfg.AgentID), 0600)
if err != nil {
log.Printf("Warning: failed to save agent_id.txt: %v", err)
}
}
func ResetAgentID() {
os.Remove("agent_id.txt")
loadOrGenerateAgentID()
}