diff --git a/core/service_status.go b/core/service_status.go index 58dfe12c..e73e9e53 100644 --- a/core/service_status.go +++ b/core/service_status.go @@ -1,9 +1,5 @@ package core -import ( - "time" -) - const ( // MaximumNumberOfResults is the maximum number of results that ServiceStatus.Results can have MaximumNumberOfResults = 100 @@ -42,17 +38,14 @@ type ServiceStatus struct { } // NewServiceStatus creates a new ServiceStatus -func NewServiceStatus(service *Service) *ServiceStatus { +func NewServiceStatus(serviceKey, serviceGroup, serviceName string) *ServiceStatus { return &ServiceStatus{ - Name: service.Name, - Group: service.Group, - Key: service.Key(), + Name: serviceName, + Group: serviceGroup, + Key: serviceKey, Results: make([]*Result, 0), - Events: []*Event{{ - Type: EventStart, - Timestamp: time.Now(), - }}, - Uptime: NewUptime(), + Events: make([]*Event, 0), + Uptime: NewUptime(), } } diff --git a/core/service_status_bench_test.go b/core/service_status_bench_test.go index 4f5e7c41..33647de6 100644 --- a/core/service_status_bench_test.go +++ b/core/service_status_bench_test.go @@ -81,7 +81,7 @@ var ( func BenchmarkServiceStatus_WithResultPagination(b *testing.B) { service := &testService - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) for i := 0; i < MaximumNumberOfResults; i++ { serviceStatus.AddResult(&testSuccessfulResult) } diff --git a/core/service_status_test.go b/core/service_status_test.go index 5c486800..8775c409 100644 --- a/core/service_status_test.go +++ b/core/service_status_test.go @@ -7,7 +7,7 @@ import ( func TestNewServiceStatus(t *testing.T) { service := &Service{Name: "name", Group: "group"} - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) if serviceStatus.Name != service.Name { t.Errorf("expected %s, got %s", service.Name, serviceStatus.Name) } @@ -21,7 +21,7 @@ func TestNewServiceStatus(t *testing.T) { func TestServiceStatus_AddResult(t *testing.T) { service := &Service{Name: "name", Group: "group"} - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) for i := 0; i < MaximumNumberOfResults+10; i++ { serviceStatus.AddResult(&Result{Timestamp: time.Now()}) } @@ -32,7 +32,7 @@ func TestServiceStatus_AddResult(t *testing.T) { func TestServiceStatus_WithResultPagination(t *testing.T) { service := &Service{Name: "name", Group: "group"} - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) for i := 0; i < 25; i++ { serviceStatus.AddResult(&Result{Timestamp: time.Now()}) } diff --git a/core/uptime_test.go b/core/uptime_test.go index 06623704..c104c574 100644 --- a/core/uptime_test.go +++ b/core/uptime_test.go @@ -7,7 +7,7 @@ import ( func TestUptime_ProcessResult(t *testing.T) { service := &Service{Name: "name", Group: "group"} - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) uptime := serviceStatus.Uptime checkUptimes(t, serviceStatus, 0.00, 0.00, 0.00) @@ -50,7 +50,7 @@ func TestUptime_ProcessResult(t *testing.T) { func TestServiceStatus_AddResultUptimeIsCleaningUpAfterItself(t *testing.T) { service := &Service{Name: "name", Group: "group"} - serviceStatus := NewServiceStatus(service) + serviceStatus := NewServiceStatus(service.Key(), service.Group, service.Name) now := time.Now() now = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) // Start 12 days ago diff --git a/storage/store/database/database.go b/storage/store/database/database.go index de1b0989..ec035c70 100644 --- a/storage/store/database/database.go +++ b/storage/store/database/database.go @@ -444,12 +444,7 @@ func (s *Store) getServiceStatusByKey(tx *sql.Tx, key string, eventsPage, events if err != nil { return nil, err } - serviceStatus := &core.ServiceStatus{ - Name: serviceName, - Group: serviceGroup, - Key: key, - Uptime: &core.Uptime{}, - } + serviceStatus := core.NewServiceStatus(key, serviceGroup, serviceName) if eventsPageSize > 0 { if serviceStatus.Events, err = s.getEventsByServiceID(tx, serviceID, eventsPage, eventsPageSize); err != nil { log.Printf("[database][getServiceStatusByKey] Failed to retrieve events for key=%s: %s", key, err.Error()) diff --git a/storage/store/memory/memory.go b/storage/store/memory/memory.go index 070569ad..b04781f4 100644 --- a/storage/store/memory/memory.go +++ b/storage/store/memory/memory.go @@ -3,6 +3,7 @@ package memory import ( "encoding/gob" "sync" + "time" "github.com/TwinProduction/gatus/core" "github.com/TwinProduction/gatus/util" @@ -69,7 +70,11 @@ func (s *Store) Insert(service *core.Service, result *core.Result) { s.Lock() serviceStatus, exists := s.cache.Get(key) if !exists { - serviceStatus = core.NewServiceStatus(service) + serviceStatus = core.NewServiceStatus(key, service.Group, service.Name) + serviceStatus.(*core.ServiceStatus).Events = append(serviceStatus.(*core.ServiceStatus).Events, &core.Event{ + Type: core.EventStart, + Timestamp: time.Now(), + }) } serviceStatus.(*core.ServiceStatus).AddResult(result) s.cache.Set(key, serviceStatus)