From 776206eec88cc4070884982e0ed488fe363e9398 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Thu, 13 Jun 2024 19:29:56 +0000 Subject: [PATCH] feat(health): only run health server when running in Docker --- Dockerfile | 5 ++++- cmd/updater/main.go | 18 ++++++++++++++---- internal/health/isdocker.go | 8 ++++++++ internal/noop/service.go | 25 +++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 internal/health/isdocker.go create mode 100644 internal/noop/service.go diff --git a/Dockerfile b/Dockerfile index 99c59753..15c75105 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,7 +50,8 @@ RUN git init && \ rm -rf .git/ FROM --platform=$BUILDPLATFORM base AS build -RUN mkdir -p /tmp/data +RUN mkdir -p /tmp/data && \ + touch /tmp/isdocker ARG VERSION=unknown ARG CREATED="an unknown date" ARG COMMIT=unknown @@ -69,8 +70,10 @@ HEALTHCHECK --interval=60s --timeout=5s --start-period=10s --retries=2 CMD ["/up ARG UID=1000 ARG GID=1000 USER ${UID}:${GID} +WORKDIR /updater ENTRYPOINT ["/updater/ddns-updater"] COPY --from=build --chown=${UID}:${GID} /tmp/data /updater/data +COPY --from=build --chown=${UID}:${GID} /tmp/isdocker /updater/isdocker ENV \ # Core CONFIG= \ diff --git a/cmd/updater/main.go b/cmd/updater/main.go index a487e413..a3fa672c 100644 --- a/cmd/updater/main.go +++ b/cmd/updater/main.go @@ -19,6 +19,7 @@ import ( "github.com/qdm12/ddns-updater/internal/health" "github.com/qdm12/ddns-updater/internal/healthchecksio" "github.com/qdm12/ddns-updater/internal/models" + "github.com/qdm12/ddns-updater/internal/noop" jsonparams "github.com/qdm12/ddns-updater/internal/params" persistence "github.com/qdm12/ddns-updater/internal/persistence/json" "github.com/qdm12/ddns-updater/internal/provider" @@ -205,10 +206,7 @@ func _main(ctx context.Context, reader *reader.Reader, args []string, logger log updaterService := update.NewService(db, updater, ipGetter, config.Update.Period, config.Update.Cooldown, logger, resolver, timeNow, hioClient) - isHealthy := health.MakeIsHealthy(db, resolver) - healthLogger := logger.New(log.SetComponent("healthcheck server")) - healthServer, err := health.NewServer(*config.Health.ServerAddress, - healthLogger, isHealthy) + healthServer, err := createHealthServer(db, resolver, logger, *config.Health.ServerAddress) if err != nil { return fmt.Errorf("creating health server: %w", err) } @@ -348,3 +346,15 @@ func exitHealthchecksio(hioClient *healthchecksio.Client, logger.Error(err.Error()) } } + +//nolint:ireturn +func createHealthServer(db health.AllSelecter, resolver health.LookupIPer, + logger log.LoggerInterface, serverAddress string) ( + healthServer goservices.Service, err error) { + if !health.IsDocker() { + return noop.New("healthcheck server"), nil + } + isHealthy := health.MakeIsHealthy(db, resolver) + healthLogger := logger.New(log.SetComponent("healthcheck server")) + return health.NewServer(serverAddress, healthLogger, isHealthy) +} diff --git a/internal/health/isdocker.go b/internal/health/isdocker.go new file mode 100644 index 00000000..993be150 --- /dev/null +++ b/internal/health/isdocker.go @@ -0,0 +1,8 @@ +package health + +import "os" + +func IsDocker() (ok bool) { + _, err := os.Stat("isdocker") + return err == nil +} diff --git a/internal/noop/service.go b/internal/noop/service.go new file mode 100644 index 00000000..e73b1891 --- /dev/null +++ b/internal/noop/service.go @@ -0,0 +1,25 @@ +package noop + +import "context" + +type Service struct { + name string +} + +func New(name string) *Service { + return &Service{ + name: name, + } +} + +func (s *Service) String() string { + return s.name + " (no-op)" +} + +func (s *Service) Start(_ context.Context) (_ <-chan error, _ error) { + return nil, nil //nolint:nilnil +} + +func (s *Service) Stop() (stopErr error) { + return nil +}