]> go.fuhry.dev Git - runtime.git/commitdiff
[http/proxy] enable config_watcher + live reload support
authorDan Fuhry <dan@fuhry.com>
Thu, 6 Nov 2025 11:55:06 +0000 (06:55 -0500)
committerDan Fuhry <dan@fuhry.com>
Sun, 9 Nov 2025 12:24:05 +0000 (07:24 -0500)
http/proxy/main.go

index b4eb445adf6b74e91918844a5b05f44c3763f4c7..c0c6b90127b363932df927f4e791202e8c1f925b 100644 (file)
@@ -3,7 +3,6 @@ package main
 import (
        "context"
        "flag"
-       "os"
        "os/signal"
        "syscall"
        "time"
@@ -11,32 +10,56 @@ import (
        "github.com/coreos/go-systemd/daemon"
        "gopkg.in/yaml.v3"
 
+       "go.fuhry.dev/runtime/config_watcher"
+       "go.fuhry.dev/runtime/ephs"
        "go.fuhry.dev/runtime/http"
-       "go.fuhry.dev/runtime/mtls"
        "go.fuhry.dev/runtime/utils/log"
 )
 
 func main() {
-       mtls.SetDefaultIdentity("authproxy")
-
        ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
        defer cancel()
 
+       ephs.DefaultClientContext = ctx
+
        configPath := flag.String("config", "", "YAML file to load configuration from")
        flag.Parse()
 
        server := http.NewServerWithContext(ctx)
 
-       contents, err := os.ReadFile(*configPath)
+       watcher, err := config_watcher.Watch(ctx, *configPath)
+       if err != nil {
+               log.Default().Panic(err)
+       }
+       defer watcher.Close()
+
+       upd, err := watcher.Next()
        if err != nil {
                log.Default().Panic(err)
        }
 
-       err = yaml.Unmarshal(contents, server)
+       err = yaml.Unmarshal(upd.Contents, server)
        if err != nil {
                log.Default().Panic(err)
        }
 
+       go (func() {
+               for {
+                       upd, err := watcher.Next()
+                       if err != nil {
+                               return
+                       }
+
+                       log.Default().Notice("Config change detected, reloading server")
+
+                       err = yaml.Unmarshal(upd.Contents, server)
+                       if err != nil {
+                               log.Default().Alertf("YAML unmarshal/hot reload failed, ignoring update: ", err)
+                               continue
+                       }
+               }
+       })()
+
        go (func() {
                if err := server.ListenAndServeTLS(); err != nil && err != http.ErrServerClosed {
                        log.Panic(err)