From 43504913b48a224fe380d9b9d9a324d9f8cde276 Mon Sep 17 00:00:00 2001 From: TwinProduction Date: Mon, 30 Nov 2020 08:44:58 -0500 Subject: [PATCH] Allow duplicate service names as long as they're in a different group (#13) --- core/service-status.go | 4 ++++ core/service-status_test.go | 7 +++++-- static/index.html | 18 +++++++++--------- watchdog/watchdog.go | 5 +++-- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/core/service-status.go b/core/service-status.go index 92102dd7..8472353e 100644 --- a/core/service-status.go +++ b/core/service-status.go @@ -2,6 +2,9 @@ package core // ServiceStatus contains the evaluation Results of a Service type ServiceStatus struct { + // Name of the service + Name string `json:"name,omitempty"` + // Group the service is a part of. Used for grouping multiple services together on the front end. Group string `json:"group,omitempty"` @@ -12,6 +15,7 @@ type ServiceStatus struct { // NewServiceStatus creates a new ServiceStatus func NewServiceStatus(service *Service) *ServiceStatus { return &ServiceStatus{ + Name: service.Name, Group: service.Group, Results: make([]*Result, 0), } diff --git a/core/service-status_test.go b/core/service-status_test.go index 4e833dfd..3963e8ac 100644 --- a/core/service-status_test.go +++ b/core/service-status_test.go @@ -3,15 +3,18 @@ package core import "testing" func TestNewServiceStatus(t *testing.T) { - service := &Service{Group: "test"} + service := &Service{Name: "name", Group: "group"} serviceStatus := NewServiceStatus(service) + if serviceStatus.Name != service.Name { + t.Errorf("expected %s, got %s", service.Name, serviceStatus.Name) + } if serviceStatus.Group != service.Group { t.Errorf("expected %s, got %s", service.Group, serviceStatus.Group) } } func TestServiceStatus_AddResult(t *testing.T) { - service := &Service{Group: "test"} + service := &Service{Name: "name", Group: "group"} serviceStatus := NewServiceStatus(service) for i := 0; i < 50; i++ { serviceStatus.AddResult(&Result{}) diff --git a/static/index.html b/static/index.html index a80e0081..1565f084 100644 --- a/static/index.html +++ b/static/index.html @@ -219,11 +219,11 @@ } } - function createStatusBadge(serviceName, index, success) { + function createStatusBadge(serviceStatusIndex, index, success) { if (success) { - return ""; + return ""; } - return "X"; + return "X"; } function refreshStatuses() { @@ -238,17 +238,17 @@ function buildTable() { let outputByGroup = {}; - for (let serviceName in serviceStatuses) { + for (let serviceStatusIndex in serviceStatuses) { let serviceStatusOverTime = ""; - let serviceStatus = serviceStatuses[serviceName]; + let serviceStatus = serviceStatuses[serviceStatusIndex]; let hostname = serviceStatus.results[serviceStatus.results.length-1].hostname; let minResponseTime = null; let maxResponseTime = null; let newestTimestamp = null; let oldestTimestamp = null; - for (let key in serviceStatus.results) { - let serviceResult = serviceStatus.results[key]; - serviceStatusOverTime = createStatusBadge(serviceName, key, serviceResult.success) + serviceStatusOverTime; + for (let resultIndex in serviceStatus.results) { + let serviceResult = serviceStatus.results[resultIndex]; + serviceStatusOverTime = createStatusBadge(serviceStatusIndex, resultIndex, serviceResult.success) + serviceStatusOverTime; const responseTime = parseInt(serviceResult.duration/1000000); if (minResponseTime == null || minResponseTime > responseTime) { minResponseTime = responseTime; @@ -268,7 +268,7 @@ + "
" + "
" + "
" - + " " + serviceName + " - " + hostname + "" + + " " + serviceStatus.name + " - " + hostname + "" + "
" + "
" + " " + (minResponseTime === maxResponseTime ? minResponseTime : (minResponseTime + "-" + maxResponseTime)) + "ms" diff --git a/watchdog/watchdog.go b/watchdog/watchdog.go index 281b534b..fb67e99b 100644 --- a/watchdog/watchdog.go +++ b/watchdog/watchdog.go @@ -81,11 +81,12 @@ func monitor(service *core.Service) { // UpdateServiceStatuses updates the slice of service statuses func UpdateServiceStatuses(service *core.Service, result *core.Result) { + key := fmt.Sprintf("%s_%s", service.Group, service.Name) serviceStatusesMutex.Lock() - serviceStatus, exists := serviceStatuses[service.Name] + serviceStatus, exists := serviceStatuses[key] if !exists { serviceStatus = core.NewServiceStatus(service) - serviceStatuses[service.Name] = serviceStatus + serviceStatuses[key] = serviceStatus } serviceStatus.AddResult(result) serviceStatusesMutex.Unlock()