package main import ( "encoding/json" "fmt" "log" "net/http" "os" "git.1e99.eu/1e99/status/routes" "git.1e99.eu/1e99/status/services" ) type Config struct { Services []json.RawMessage `json:"services"` } func run() error { var err error config, err := loadConfig() if err != nil { return fmt.Errorf("failed to load config: %s", err) } serviceList := make([]*services.Service, 0) for _, raw := range config.Services { service, err := services.NewService(raw) if err != nil { log.Printf("Failed to create service: %s", err) } stop := make(chan bool) go service.Start(stop) serviceList = append(serviceList, service) } mux := http.NewServeMux() mux.HandleFunc("GET /{$}", routes.Index(serviceList)) address := os.Getenv("STATUS_ADDRESS") if address == "" { address = ":3000" } log.Printf("Listening on %s", address) err = http.ListenAndServe(address, mux) if err != nil { return err } return nil } func loadConfig() (Config, error) { raw, err := os.ReadFile("config.json") if err != nil { return Config{}, nil } var config Config err = json.Unmarshal(raw, &config) if err != nil { return Config{}, nil } return config, nil } func main() { err := run() if err != nil { log.Fatalf("%s", err) } }