Просмотр исходного кода

feat(alerting): add heartbeat writer

bergquist 9 лет назад
Родитель
Сommit
a1f97e0b77
2 измененных файлов с 51 добавлено и 0 удалено
  1. 7 0
      pkg/models/alerts.go
  2. 44 0
      pkg/services/sqlstore/alert_rule.go

+ 7 - 0
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
 

+ 44 - 0
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)