76 lines
1.5 KiB
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
|
|
}
|