From 0ce0e4765baba500fd1e0d118bb12d5692690d6b Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Sat, 19 Nov 2022 13:18:43 +0100 Subject: [PATCH] GODT-2122: Handle check for updates failure --- internal/bridge/bridge.go | 2 +- internal/events/update.go | 11 +++++++++++ internal/frontend/grpc/service_methods.go | 13 ++++++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/internal/bridge/bridge.go b/internal/bridge/bridge.go index 1c76e9db..bf08fa0a 100644 --- a/internal/bridge/bridge.go +++ b/internal/bridge/bridge.go @@ -365,7 +365,7 @@ func (bridge *Bridge) init(tlsReporter TLSReporter) error { version, err := bridge.updater.GetVersionInfo(ctx, bridge.api, bridge.vault.GetUpdateChannel()) if err != nil { - logrus.WithError(err).Error("Failed to check for updates") + bridge.publish(events.UpdateCheckFailed{Error: err}) } else { bridge.handleUpdate(version) } diff --git a/internal/events/update.go b/internal/events/update.go index 6d5b0c36..0d3a15ed 100644 --- a/internal/events/update.go +++ b/internal/events/update.go @@ -111,3 +111,14 @@ type UpdateForced struct { func (event UpdateForced) String() string { return "UpdateForced" } + +// UpdateCheckFailed is published when the update check fails. +type UpdateCheckFailed struct { + eventBase + + Error error +} + +func (event UpdateCheckFailed) String() string { + return fmt.Sprintf("UpdateCheckFailed: Error: %s", event.Error) +} diff --git a/internal/frontend/grpc/service_methods.go b/internal/frontend/grpc/service_methods.go index d70fb08b..dc518192 100644 --- a/internal/frontend/grpc/service_methods.go +++ b/internal/frontend/grpc/service_methods.go @@ -504,17 +504,24 @@ func (s *Service) CheckUpdate(context.Context, *emptypb.Empty) (*emptypb.Empty, go func() { defer s.panicHandler.HandlePanic() - updateCh, done := s.bridge.GetEvents(events.UpdateAvailable{}, events.UpdateNotAvailable{}) + updateCh, done := s.bridge.GetEvents( + events.UpdateAvailable{}, + events.UpdateNotAvailable{}, + events.UpdateCheckFailed{}, + ) defer done() s.bridge.CheckForUpdates() switch (<-updateCh).(type) { + case events.UpdateNotAvailable: + _ = s.SendEvent(NewUpdateIsLatestVersionEvent()) + case events.UpdateAvailable: // ... this is handled by the main event loop - case events.UpdateNotAvailable: - _ = s.SendEvent(NewUpdateIsLatestVersionEvent()) + case events.UpdateCheckFailed: + // ... maybe show an error? but do nothing for now } _ = s.SendEvent(NewUpdateCheckFinishedEvent())