ip-ddns/main.go

76 lines
1.5 KiB
Go

package main
import (
"context"
"os"
"os/signal"
"syscall"
"git.ext.icikowski.pl/icikowski/ip-ddns/adapter/directadmin"
"git.ext.icikowski.pl/icikowski/ip-ddns/adapter/dnsresolver"
"git.ext.icikowski.pl/icikowski/ip-ddns/app"
"git.ext.icikowski.pl/icikowski/ip-ddns/config"
"github.com/caarlos0/env/v10"
"github.com/rs/zerolog"
)
var (
conf *config.Config = &config.Config{}
mainLog zerolog.Logger = zerolog.
New(zerolog.ConsoleWriter{
Out: os.Stdout,
NoColor: false,
TimeFormat: "2006-01-02 15:04:05",
}).
Level(zerolog.DebugLevel).
With().
Timestamp().
Logger()
)
func init() {
log := mainLog.With().Str("unit", "init").Logger()
if err := env.ParseWithOptions(conf, env.Options{
Prefix: "SYNCER_",
}); err != nil {
log.Fatal().Err(err).Msg("unable to parse config")
}
log.Info().Object("conf", conf).Msg("loaded configuration")
}
func main() {
log := mainLog.With().Str("unit", "cmd").Logger()
ctx, cancel := signal.NotifyContext(
context.Background(),
os.Interrupt,
syscall.SIGKILL,
)
defer cancel()
resolv := dnsresolver.New()
daClient := directadmin.New(
conf.DirectAdmin.URL,
conf.DirectAdmin.User,
conf.DirectAdmin.Token,
)
svc := app.NewService(
daClient,
resolv,
conf.Domain,
conf.ResyncTime,
mainLog.With().Str("unit", "service").Logger(),
)
done := make(chan error)
go func() {
log.Info().Msg("starting service")
done <- svc.Run(ctx)
log.Info().Msg("service stopped")
}()
<-done
}