Browse Source

notifier panic fix

pull/805/head
hunterlong 2 years ago
parent
commit
8c0543a161
  1. 3
      CHANGELOG.md
  2. 22
      database/grouping.go
  3. 10
      handlers/notifications.go
  4. 1
      handlers/routes.go
  5. 13
      handlers/services.go
  6. 2
      types/checkins/database_hits.go
  7. 2
      types/incidents/database.go
  8. 2
      version.txt

3
CHANGELOG.md

@ -1,3 +1,6 @@
# 0.90.65 (08-24-2020)
- Fixed issue with dashboard not logging in (notifier panic)
# 0.90.64 (08-18-2020)
- Modified max-width for container to 1012px, larger UI
- Added failure sparklines in the Services list view

22
database/grouping.go

@ -70,19 +70,19 @@ func (t *TimeVar) ToValues() ([]*TimeValue, error) {
}
// GraphData will return all hits or failures
func (g *GroupQuery) GraphData(by By) ([]*TimeValue, error) {
g.db = g.db.MultipleSelects(
g.db.SelectByTime(g.Group),
func (b *GroupQuery) GraphData(by By) ([]*TimeValue, error) {
b.db = b.db.MultipleSelects(
b.db.SelectByTime(b.Group),
by.String(),
).Group("timeframe").Order("timeframe", true)
caller, err := g.ToTimeValue()
caller, err := b.ToTimeValue()
if err != nil {
return nil, err
}
if g.FillEmpty {
return caller.FillMissing(g.Start, g.End)
if b.FillEmpty {
return caller.FillMissing(b.Start, b.End)
}
return caller.ToValues()
}
@ -90,8 +90,8 @@ func (g *GroupQuery) GraphData(by By) ([]*TimeValue, error) {
// ToTimeValue will format the SQL rows into a JSON format for the API.
// [{"timestamp": "2006-01-02T15:04:05Z", "amount": 468293}]
// TODO redo this entire function, use better SQL query to group by time
func (g *GroupQuery) ToTimeValue() (*TimeVar, error) {
rows, err := g.db.Rows()
func (b *GroupQuery) ToTimeValue() (*TimeVar, error) {
rows, err := b.db.Rows()
if err != nil {
return nil, err
}
@ -102,8 +102,8 @@ func (g *GroupQuery) ToTimeValue() (*TimeVar, error) {
if err := rows.Scan(&timeframe, &amount); err != nil {
log.Error(err, timeframe)
}
trueTime, _ := g.db.ParseTime(timeframe)
newTs := types.FixedTime(trueTime, g.Group)
trueTime, _ := b.db.ParseTime(timeframe)
newTs := types.FixedTime(trueTime, b.Group)
tv := &TimeValue{
Timeframe: newTs,
@ -111,7 +111,7 @@ func (g *GroupQuery) ToTimeValue() (*TimeVar, error) {
}
data = append(data, tv)
}
return &TimeVar{g, data}, nil
return &TimeVar{b, data}, nil
}
func (t *TimeVar) FillMissing(current, end time.Time) ([]*TimeValue, error) {

10
handlers/notifications.go

@ -14,8 +14,14 @@ func apiNotifiersHandler(w http.ResponseWriter, r *http.Request) {
var notifs []notifications.Notification
for _, n := range services.AllNotifiers() {
no := n.Select()
notif, _ := notifications.Find(no.Method)
notifs = append(notifs, *no.UpdateFields(notif))
notif, err := notifications.Find(no.Method)
if err != nil {
log.Errorln(err)
sendErrorJson(err, w, r)
return
}
updated := no.UpdateFields(notif)
notifs = append(notifs, *updated)
}
sort.Sort(notifications.NotificationOrder(notifs))
returnJson(notifs, w, r)

1
handlers/routes.go

@ -132,6 +132,7 @@ func Router() *mux.Router {
api.Handle("/api/services/{id}/failures", scoped(apiServiceFailuresHandler)).Methods("GET")
api.Handle("/api/services/{id}/failures", authenticated(servicesDeleteFailuresHandler, false)).Methods("DELETE")
api.Handle("/api/services/{id}/hits", scoped(apiServiceHitsHandler)).Methods("GET")
api.Handle("/api/services/{id}/hits", authenticated(apiServiceHitsDeleteHandler, false)).Methods("DELETE")
// API SERVICE CHART DATA Routes
api.Handle("/api/services/{id}/hits_data", cached("30s", "application/json", apiServiceDataHandler)).Methods("GET")

13
handlers/services.go

@ -237,6 +237,19 @@ func apiServiceTimeDataHandler(w http.ResponseWriter, r *http.Request) {
returnJson(uptimeData, w, r)
}
func apiServiceHitsDeleteHandler(w http.ResponseWriter, r *http.Request) {
service, err := findService(r)
if err != nil {
sendErrorJson(err, w, r)
return
}
if err := service.AllHits().DeleteAll(); err != nil {
sendErrorJson(err, w, r)
return
}
sendJsonAction(service, "delete", w, r)
}
func apiServiceDeleteHandler(w http.ResponseWriter, r *http.Request) {
service, err := findService(r)
if err != nil {

2
types/checkins/database_hits.go

@ -8,7 +8,7 @@ func (c *Checkin) LastHit() *CheckinHit {
func (c *Checkin) Hits() []*CheckinHit {
var hits []*CheckinHit
dbHits.Where("checkin = ?", c.Id).Order("DESC").Find(&hits)
dbHits.Where("checkin = ?", c.Id).Order("id DESC").Find(&hits)
c.AllHits = hits
return hits
}

2
types/incidents/database.go

@ -34,7 +34,7 @@ func (i *Incident) BeforeCreate() error {
}
func (i *Incident) AfterFind() {
db.Model(i).Related(&i.Updates).Order("DESC")
db.Model(i).Related(&i.Updates).Order("id DESC")
metrics.Query("incident", "find")
}

2
version.txt

@ -1 +1 @@
0.90.64
0.90.65

Loading…
Cancel
Save