diff --git a/pkg/models/alerts.go b/pkg/models/alerts.go index b98eef598f4..87371d49876 100644 --- a/pkg/models/alerts.go +++ b/pkg/models/alerts.go @@ -52,6 +52,13 @@ type AlertingClusterInfo struct { UptimePosition int } +type HeartBeat struct { + Id int64 + ServerId string + Updated time.Time + Created time.Time +} + type HeartBeatCommand struct { ServerId string diff --git a/pkg/services/sqlstore/alert_rule.go b/pkg/services/sqlstore/alert_rule.go index 1e68561ed21..36f142df7bb 100644 --- a/pkg/services/sqlstore/alert_rule.go +++ b/pkg/services/sqlstore/alert_rule.go @@ -17,8 +17,52 @@ func init() { bus.AddHandler("sql", GetAlertById) bus.AddHandler("sql", DeleteAlertById) bus.AddHandler("sql", GetAllAlertQueryHandler) + //bus.AddHandler("sql", HeartBeat) } +/* +func HeartBeat(query *m.HeartBeatCommand) error { + return inTransaction(func(sess *xorm.Session) error { + now := time.Now().Sub(0, 0, 0, 5) + activeTime := time.Now().Sub(0, 0, 0, 5) + ownHeartbeats := make([]m.HeartBeat, 0) + err := x.Where("server_id = ?", query.ServerId).Find(&ownHeartbeats) + + if err != nil { + return err + } + + if (len(ownHeartbeats)) > 0 && ownHeartbeats[0].Updated > activeTime { + //update + x.Insert(&m.HeartBeat{ServerId: query.ServerId, Created: now, Updated: now}) + } else { + thisServer := ownHeartbeats[0] + thisServer.Updated = now + x.Id(thisServer.Id).Update(&thisServer) + } + + activeServers := make([]m.HeartBeat, 0) + err = x.Where("server_id = ? and updated > ", query.ServerId, now.String()).OrderBy("id").Find(&activeServers) + + if err != nil { + return err + } + + for i, pos := range activeServers { + if pos.ServerId == query.ServerId { + query.Result = &m.AlertingClusterInfo{ + ClusterSize: len(activeServers), + UptimePosition: i, + } + return nil + } + } + + return nil + }) +} +*/ + func GetAlertById(query *m.GetAlertByIdQuery) error { alert := m.AlertRule{} has, err := x.Id(query.Id).Get(&alert)