Worker: add -find-manager
CLI arg
With `-find-manager` the Worker will use UPnP/SSDP autodiscovery, report which Manager it found, and quit.
This commit is contained in:
parent
b33db33d17
commit
afc6b8e1c5
@ -36,6 +36,8 @@ var cliArgs struct {
|
|||||||
quiet, debug, trace bool
|
quiet, debug, trace bool
|
||||||
|
|
||||||
managerURL *url.URL
|
managerURL *url.URL
|
||||||
|
findManager bool
|
||||||
|
|
||||||
manager string
|
manager string
|
||||||
register bool
|
register bool
|
||||||
}
|
}
|
||||||
@ -58,6 +60,19 @@ func main() {
|
|||||||
Msgf("starting %v Worker", appinfo.ApplicationName)
|
Msgf("starting %v Worker", appinfo.ApplicationName)
|
||||||
configLogLevel()
|
configLogLevel()
|
||||||
|
|
||||||
|
if cliArgs.findManager {
|
||||||
|
// TODO: move this to a more suitable place.
|
||||||
|
discoverTimeout := 1 * time.Minute
|
||||||
|
discoverCtx, discoverCancel := context.WithTimeout(context.Background(), discoverTimeout)
|
||||||
|
defer discoverCancel()
|
||||||
|
managerURL, err := worker.AutodiscoverManager(discoverCtx)
|
||||||
|
if err != nil {
|
||||||
|
logFatalManagerDiscoveryError(err, discoverTimeout)
|
||||||
|
}
|
||||||
|
log.Info().Str("manager", managerURL).Msg("found Manager")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
configWrangler := worker.NewConfigWrangler()
|
configWrangler := worker.NewConfigWrangler()
|
||||||
|
|
||||||
// Give the auto-discovery some time to find a Manager.
|
// Give the auto-discovery some time to find a Manager.
|
||||||
@ -65,11 +80,7 @@ func main() {
|
|||||||
discoverCtx, discoverCancel := context.WithTimeout(context.Background(), discoverTimeout)
|
discoverCtx, discoverCancel := context.WithTimeout(context.Background(), discoverTimeout)
|
||||||
defer discoverCancel()
|
defer discoverCancel()
|
||||||
if err := worker.MaybeAutodiscoverManager(discoverCtx, &configWrangler); err != nil {
|
if err := worker.MaybeAutodiscoverManager(discoverCtx, &configWrangler); err != nil {
|
||||||
if errors.Is(err, context.DeadlineExceeded) {
|
logFatalManagerDiscoveryError(err, discoverTimeout)
|
||||||
log.Fatal().Str("timeout", discoverTimeout.String()).Msg("could not discover Manager in time")
|
|
||||||
} else {
|
|
||||||
log.Fatal().Err(err).Msg("auto-discovery error")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Startup can take arbitrarily long, as it only ends when the Manager can be
|
// Startup can take arbitrarily long, as it only ends when the Manager can be
|
||||||
@ -150,6 +161,7 @@ func parseCliArgs() {
|
|||||||
// TODO: make this override whatever was stored in the configuration file.
|
// TODO: make this override whatever was stored in the configuration file.
|
||||||
// flag.StringVar(&cliArgs.manager, "manager", "", "URL of the Flamenco Manager.")
|
// flag.StringVar(&cliArgs.manager, "manager", "", "URL of the Flamenco Manager.")
|
||||||
flag.BoolVar(&cliArgs.register, "register", false, "(Re-)register at the Manager.")
|
flag.BoolVar(&cliArgs.register, "register", false, "(Re-)register at the Manager.")
|
||||||
|
flag.BoolVar(&cliArgs.findManager, "find-manager", false, "Autodiscover a Manager, then quit.")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
@ -193,3 +205,11 @@ func upstreamBufferOrDie(client worker.FlamencoClient, timeService clock.Clock)
|
|||||||
|
|
||||||
return buffer
|
return buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logFatalManagerDiscoveryError(err error, discoverTimeout time.Duration) {
|
||||||
|
if errors.Is(err, context.DeadlineExceeded) {
|
||||||
|
log.Fatal().Str("timeout", discoverTimeout.String()).Msg("could not discover Manager in time")
|
||||||
|
} else {
|
||||||
|
log.Fatal().Err(err).Msg("auto-discovery error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -27,7 +27,7 @@ func MaybeAutodiscoverManager(ctx context.Context, configWrangler *FileConfigWra
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
foundManager, err := autodiscoverManager(ctx)
|
foundManager, err := AutodiscoverManager(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -36,8 +36,8 @@ func MaybeAutodiscoverManager(ctx context.Context, configWrangler *FileConfigWra
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// autodiscoverManager uses UPnP/SSDP to find a Manager, and returns its URL if found.
|
// AutodiscoverManager uses UPnP/SSDP to find a Manager, and returns its URL if found.
|
||||||
func autodiscoverManager(ctx context.Context) (string, error) {
|
func AutodiscoverManager(ctx context.Context) (string, error) {
|
||||||
c, err := upnp_ssdp.NewClient(log.Logger)
|
c, err := upnp_ssdp.NewClient(log.Logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("unable to create UPnP/SSDP client: %w", err)
|
return "", fmt.Errorf("unable to create UPnP/SSDP client: %w", err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user