From 7002bf8e34c97fdf3c71912d2fda98b21f3d351c Mon Sep 17 00:00:00 2001 From: "Quentin McGaw (desktop)" Date: Mon, 31 May 2021 18:47:38 +0000 Subject: [PATCH] Maintenance: improve printVersion function - Print program versions in order given - Exit program on any error as each program is required --- cmd/gluetun/main.go | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 0d357e49..33c4eceb 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -148,12 +148,14 @@ func _main(ctx context.Context, buildInfo models.BuildInformation, fmt.Println(gluetunLogging.Splash(buildInfo)) - printVersions(ctx, logger, map[string]func(ctx context.Context) (string, error){ - "Alpine": alpineConf.Version, - "OpenVPN": ovpnConf.Version, - "Unbound": dnsConf.Version, - "IPtables": firewallConf.Version, - }) + if err := printVersions(ctx, logger, []printVersionElement{ + {name: "Alpine", getVersion: alpineConf.Version}, + {name: "OpenVPN", getVersion: ovpnConf.Version}, + {name: "Unbound", getVersion: dnsConf.Version}, + {name: "IPtables", getVersion: firewallConf.Version}, + }); err != nil { + return err + } var allSettings configuration.Settings err := allSettings.Read(params.NewEnv(), os, @@ -367,19 +369,26 @@ func _main(ctx context.Context, buildInfo models.BuildInformation, return shutdownOrder.Shutdown(shutdownMaxTimeout, logger) } +type printVersionElement struct { + name string + getVersion func(ctx context.Context) (version string, err error) +} + func printVersions(ctx context.Context, logger logging.Logger, - versionFunctions map[string]func(ctx context.Context) (string, error)) { + elements []printVersionElement) (err error) { const timeout = 5 * time.Second ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() - for name, f := range versionFunctions { - version, err := f(ctx) + + for _, element := range elements { + version, err := element.getVersion(ctx) if err != nil { - logger.Error(err) - } else { - logger.Info("%s version: %s", name, version) + return err } + logger.Info(element.name + " version: " + version) } + + return nil } func routeReadyEvents(ctx context.Context, done chan<- struct{}, buildInfo models.BuildInformation,