fix: harden DynDNS recovery and publish v1.5.1
This commit is contained in:
1 parent
3383b91e49
commit
81def77e3c
37 files changed
+2415
-250
No files matched your search
+20
-1
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -15,6 +16,7 @@ import (
|
||||
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/appupdate"
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/config"
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/diagnostics"
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/hetzner"
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/ipresolve"
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/scheduler"
|
||||
@@ -74,6 +76,10 @@ func run(logger *slog.Logger) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := diagnostics.Configure(filepath.Join(cfg.DataDir, "diagnostics.jsonl"), logger); err != nil {
|
||||
logger.Warn("diagnostic log unavailable")
|
||||
}
|
||||
diagnostics.Record(diagnostics.Event{Code: "startup", Network: diagnostics.CurrentNetwork()})
|
||||
cipher, err := secure.LoadOrCreateCipher(cfg.MasterKeyFile)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -84,6 +90,9 @@ func run(logger *slog.Logger) error {
|
||||
return err
|
||||
}
|
||||
defer database.Close()
|
||||
if err := database.RecoverInterruptedRuns(ctx); err != nil {
|
||||
return fmt.Errorf("recover interrupted update runs: %w", err)
|
||||
}
|
||||
if err := database.Prune(ctx); err != nil {
|
||||
logger.Warn("prune old local data", "error", err)
|
||||
}
|
||||
@@ -98,7 +107,9 @@ func run(logger *slog.Logger) error {
|
||||
return err
|
||||
}
|
||||
if !settings.IPv6Enabled {
|
||||
deleted, cleanupErr := updater.DisableIPv6(ctx)
|
||||
cleanupCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
|
||||
deleted, cleanupErr := updater.DisableIPv6(cleanupCtx)
|
||||
cancel()
|
||||
if cleanupErr != nil {
|
||||
logger.Warn("enforce disabled IPv6", "error", cleanupErr)
|
||||
} else if deleted > 0 {
|
||||
@@ -128,6 +139,14 @@ func run(logger *slog.Logger) error {
|
||||
appCtx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer stop()
|
||||
updater.Start(appCtx)
|
||||
defer func() {
|
||||
stop()
|
||||
waitCtx, cancel := context.WithTimeout(context.Background(), cfg.ShutdownTimeout)
|
||||
defer cancel()
|
||||
if err := updater.Wait(waitCtx); err != nil {
|
||||
logger.Warn("waiting for updater shutdown", "error", err)
|
||||
}
|
||||
}()
|
||||
softwareUpdates.Start(appCtx)
|
||||
go pruneStore(appCtx, database, logger)
|
||||
httpServer := &http.Server{
|
||||
|
||||
Reference in new issue
Block a user