1package main 2 3import ( 4 "context" 5 "log" 6 "os" 7 8 "tangled.sh/seiso.moe/aletheia.directory/pkg/config" 9 "tangled.sh/seiso.moe/aletheia.directory/pkg/database" 10 "tangled.sh/seiso.moe/aletheia.directory/pkg/logging" 11 "tangled.sh/seiso.moe/aletheia.directory/pkg/mirror" 12) 13 14func main() { 15 cfg, err := config.LoadConfig("./plc.toml") 16 if err != nil { 17 log.Fatal(err) 18 } 19 20 logger := logging.NewLogger(cfg.LogLevel) 21 22 client, err := database.NewClient(cfg.DatabaseURL, logger) 23 if err != nil { 24 logger.Error("failed to setup database", "error", err) 25 os.Exit(1) 26 } 27 defer func() { 28 if err := client.Close(); err != nil { 29 logger.Error("failed to close database connection", "error", err) 30 } 31 }() 32 33 ctx, cancel := context.WithCancel(context.Background()) 34 defer cancel() 35 36 mirrorService := mirror.NewMirrorService(client, logger) 37 logger.Info("starting PLC mirror service") 38 if err := mirrorService.Sync(ctx); err != nil { 39 if err != context.Canceled { 40 logger.Error("mirror service failed", "error", err) 41 os.Exit(1) 42 } 43 logger.Info("mirror service shutdown gracefully") 44 } 45}