diff --git a/storage/memory.go b/storage/memory.go index f9688dc0..8a50ff8c 100644 --- a/storage/memory.go +++ b/storage/memory.go @@ -41,6 +41,18 @@ func (ims *InMemoryStore) GetAll() map[string]*core.ServiceStatus { return results } +// GetServiceStatus returns the service status for a given service name in the given group +func (ims *InMemoryStore) GetServiceStatus(group, name string) *core.ServiceStatus { + key := fmt.Sprintf("%s_%s", group, name) + serviceResultsMutex.RLock() + serviceStatus, exists := serviceStatuses[key] + serviceResultsMutex.RUnlock() + if !exists { + return nil + } + return serviceStatus +} + // Insert inserts the observed result for the specified service into the in memory store func (ims *InMemoryStore) Insert(service *core.Service, result *core.Result) { key := fmt.Sprintf("%s_%s", service.Group, service.Name) diff --git a/watchdog/watchdog.go b/watchdog/watchdog.go index 408406b8..7e7664f0 100644 --- a/watchdog/watchdog.go +++ b/watchdog/watchdog.go @@ -30,10 +30,8 @@ func GetServiceStatusesAsJSON() ([]byte, error) { // GetUptimeByServiceGroupAndName returns the uptime of a service based on its group and name func GetUptimeByServiceGroupAndName(group, name string) *core.Uptime { - key := fmt.Sprintf("%s_%s", group, name) - serviceStatuses := store.GetAll() - serviceStatus, exists := serviceStatuses[key] - if !exists { + serviceStatus := store.GetServiceStatus(group, name) + if serviceStatus == nil { return nil } return serviceStatus.Uptime