plc.directory mirror
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}