From c24def95983af0289027f0635f4176713c09999a Mon Sep 17 00:00:00 2001 From: Rhythm <35167328+kRhythm@users.noreply.github.com> Date: Thu, 24 Feb 2022 16:05:18 +0530 Subject: [PATCH] bug_fix --- handlers/services.go | 22 +++++++++++++++++++--- types/downtimes/database.go | 7 +++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/handlers/services.go b/handlers/services.go index e4640de4..525a380c 100644 --- a/handlers/services.go +++ b/handlers/services.go @@ -545,11 +545,27 @@ func apiAllServicesStatusHandler(w http.ResponseWriter, r *http.Request) { t = query.Get("time") } var srvs []services.ServiceWithDowntime - dtime := findAllDowntimes(t) m := make(map[int64]downtimes.Downtime) - for i := 0; i < len(dtime); i += 1 { - m[dtime[i].ServiceId] = dtime[i] + if t == "" { + dtime:=downtimes.FindDowntime2() + timeNow := time.Now() + for i := 0; i < len(dtime); i++ { + downtimeVar := dtime[i] + serviceVar,_ := services.Find(downtimeVar.ServiceId) + checkInterval := time.Duration(serviceVar.Interval) + timeInstance := timeNow.Add(-time.Second * checkInterval) + if(timeInstance.After(*(downtimeVar.Start)) || timeInstance.Equal(*(downtimeVar.Start)) ) && (downtimeVar.End == nil || (timeInstance.Before(*(downtimeVar.End)) || timeInstance.Equal(*(downtimeVar.End))) ){ + m[downtimeVar.ServiceId] = downtimeVar + } + } + }else{ + dtime := findAllDowntimes(t) + for i := 0; i < len(dtime); i += 1 { + m[dtime[i].ServiceId] = dtime[i] + } } + + for _, v := range services.AllInOrder() { var serviceDowntimeVar services.ServiceWithDowntime serviceDowntimeVar.Service = v diff --git a/types/downtimes/database.go b/types/downtimes/database.go index 0c12c90e..f11abfa1 100644 --- a/types/downtimes/database.go +++ b/types/downtimes/database.go @@ -67,6 +67,13 @@ func FindDowntime(timeVar time.Time) []Downtime { return downtime } +func FindDowntime2()[]Downtime { + var downtime []Downtime + db.Raw("SELECT DISTINCT ON (downtimes.service) downtimes.* FROM downtimes ORDER BY service ASC, start DESC;").Scan(&downtime) + //db.Select("downtimes.*").Joins("left join downtimes as d2 on d2.service = downtimes.service AND downtimes.start < d2.start").Where("d2.end = ?",nil).Find(&downtime) + return downtime +} + func FindAll(vars map[string]string) (*[]Downtime, error) { var downtime []Downtime var start time.Time