diff --git a/core/failures.go b/core/failures.go index 74f0f0d7..669c598e 100644 --- a/core/failures.go +++ b/core/failures.go @@ -30,7 +30,6 @@ type Failure struct { // CreateFailure will create a new failure record for a service func (s *Service) CreateFailure(f *types.Failure) (int64, error) { - f.CreatedAt = time.Now().UTC() f.Service = s.Id s.Failures = append(s.Failures, f) row := failuresDB().Create(f) diff --git a/core/hits.go b/core/hits.go index 2d241191..67d5d5f2 100644 --- a/core/hits.go +++ b/core/hits.go @@ -27,7 +27,6 @@ type Hit struct { // CreateHit will create a new 'hit' record in the database for a successful/online service func (s *Service) CreateHit(h *types.Hit) (int64, error) { - h.CreatedAt = time.Now().UTC() db := hitsDB().Create(h) if db.Error != nil { utils.Log(2, db.Error) diff --git a/core/notifier/notifiers_test.go b/core/notifier/notifiers_test.go index cff5ab05..7be087d5 100644 --- a/core/notifier/notifiers_test.go +++ b/core/notifier/notifiers_test.go @@ -232,7 +232,7 @@ func TestRunAllQueueAndStop(t *testing.T) { assert.Equal(t, 16, len(example.Queue)) go Queue(example) assert.Equal(t, 16, len(example.Queue)) - time.Sleep(15 * time.Second) + time.Sleep(13 * time.Second) assert.Equal(t, 6, len(example.Queue)) time.Sleep(1 * time.Second) assert.Equal(t, 6, len(example.Queue)) diff --git a/core/services.go b/core/services.go index 3757addc..d5115492 100644 --- a/core/services.go +++ b/core/services.go @@ -166,6 +166,56 @@ func GroupDataBy(column string, id int64, tm time.Time, increment string) string return sql } +func (s *Service) AfterFind() (err error) { + s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone) + return +} + +func (s *Hit) AfterFind() (err error) { + s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone) + return +} + +func (s *Failure) AfterFind() (err error) { + s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone) + return +} + +func (s *User) AfterFind() (err error) { + s.CreatedAt = utils.Timezoner(s.CreatedAt, CoreApp.Timezone) + return +} + +func (u *Hit) BeforeCreate() (err error) { + u.CreatedAt = time.Now().UTC() + return +} + +func (u *Failure) BeforeCreate() (err error) { + u.CreatedAt = time.Now().UTC() + return +} + +func (u *User) BeforeCreate() (err error) { + u.CreatedAt = time.Now().UTC() + return +} + +func (u *Service) BeforeCreate() (err error) { + u.CreatedAt = time.Now().UTC() + return +} + +func (s *Service) Downtime() time.Duration { + hits, _ := s.Hits() + fails := s.LimitedFailures() + if len(fails) == 0 { + return time.Duration(0) + } + since := fails[0].CreatedAt.Sub(hits[0].CreatedAt) + return since +} + func (s *Service) GraphDataRaw() []*DateScan { var d []*DateScan since := time.Now().Add(time.Hour*-24 + time.Minute*0 + time.Second*0) diff --git a/core/services_test.go b/core/services_test.go index 96697eb4..7b1d2eaa 100644 --- a/core/services_test.go +++ b/core/services_test.go @@ -45,6 +45,12 @@ func TestSelectAllServices(t *testing.T) { assert.Equal(t, 15, len(services)) } +func TestServiceDowntime(t *testing.T) { + service := SelectService(15) + downtime := service.Downtime() + assert.True(t, downtime.Minutes() > 9) +} + func TestSelectTCPService(t *testing.T) { services := CoreApp.Services assert.Equal(t, 15, len(services))