| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 	"bytes" | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2016-05-16 21:39:09 +08:00
										 |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 22:18:28 +08:00
										 |  |  | 	"github.com/go-xorm/xorm" | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							|  |  |  | 	bus.AddHandler("sql", SaveAlerts) | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 	bus.AddHandler("sql", HandleAlertsQuery) | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | 	bus.AddHandler("sql", GetAlertById) | 
					
						
							| 
									
										
										
										
											2016-05-02 22:07:19 +08:00
										 |  |  | 	bus.AddHandler("sql", DeleteAlertById) | 
					
						
							| 
									
										
										
										
											2016-06-03 21:24:53 +08:00
										 |  |  | 	bus.AddHandler("sql", GetAllAlertQueryHandler) | 
					
						
							| 
									
										
										
										
											2016-07-22 19:14:09 +08:00
										 |  |  | 	bus.AddHandler("sql", SetAlertState) | 
					
						
							| 
									
										
										
										
											2016-09-30 23:37:47 +08:00
										 |  |  | 	bus.AddHandler("sql", GetAlertStatesForDashboard) | 
					
						
							| 
									
										
										
										
											2016-10-10 20:26:09 +08:00
										 |  |  | 	bus.AddHandler("sql", PauseAlertRule) | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 14:23:50 +08:00
										 |  |  | func GetAlertById(query *m.GetAlertByIdQuery) error { | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | 	alert := m.Alert{} | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | 	has, err := x.Id(query.Id).Get(&alert) | 
					
						
							|  |  |  | 	if !has { | 
					
						
							|  |  |  | 		return fmt.Errorf("could not find alert") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-04-28 16:59:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-06 19:50:47 +08:00
										 |  |  | 	query.Result = &alert | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-03 21:24:53 +08:00
										 |  |  | func GetAllAlertQueryHandler(query *m.GetAllAlertsQuery) error { | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | 	var alerts []*m.Alert | 
					
						
							| 
									
										
										
										
											2016-06-11 16:54:24 +08:00
										 |  |  | 	err := x.Sql("select * from alert").Find(&alerts) | 
					
						
							| 
									
										
										
										
											2016-06-03 21:24:53 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	query.Result = alerts | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-14 15:43:30 +08:00
										 |  |  | func deleteAlertByIdInternal(alertId int64, reason string, sess *xorm.Session) error { | 
					
						
							|  |  |  | 	sqlog.Debug("Deleting alert", "id", alertId, "reason", reason) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := sess.Exec("DELETE FROM alert WHERE id = ?", alertId); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if _, err := sess.Exec("DELETE FROM annotation WHERE alert_id = ?", alertId); err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 22:07:19 +08:00
										 |  |  | func DeleteAlertById(cmd *m.DeleteAlertCommand) error { | 
					
						
							|  |  |  | 	return inTransaction(func(sess *xorm.Session) error { | 
					
						
							| 
									
										
										
										
											2016-10-14 15:43:30 +08:00
										 |  |  | 		return deleteAlertByIdInternal(cmd.AlertId, "DeleteAlertCommand", sess) | 
					
						
							| 
									
										
										
										
											2016-05-02 22:07:19 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | func HandleAlertsQuery(query *m.GetAlertsQuery) error { | 
					
						
							|  |  |  | 	var sql bytes.Buffer | 
					
						
							|  |  |  | 	params := make([]interface{}, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	sql.WriteString(`SELECT * | 
					
						
							| 
									
										
										
										
											2016-06-11 16:54:24 +08:00
										 |  |  | 						from alert | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 						`) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	sql.WriteString(`WHERE org_id = ?`) | 
					
						
							|  |  |  | 	params = append(params, query.OrgId) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-10 15:45:56 +08:00
										 |  |  | 	if query.DashboardId != 0 { | 
					
						
							|  |  |  | 		sql.WriteString(` AND dashboard_id = ?`) | 
					
						
							|  |  |  | 		params = append(params, query.DashboardId) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if query.PanelId != 0 { | 
					
						
							|  |  |  | 		sql.WriteString(` AND panel_id = ?`) | 
					
						
							|  |  |  | 		params = append(params, query.PanelId) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:00:00 +08:00
										 |  |  | 	if len(query.State) > 0 && query.State[0] != "ALL" { | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 		sql.WriteString(` AND (`) | 
					
						
							|  |  |  | 		for i, v := range query.State { | 
					
						
							|  |  |  | 			if i > 0 { | 
					
						
							|  |  |  | 				sql.WriteString(" OR ") | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			sql.WriteString("state = ? ") | 
					
						
							| 
									
										
										
										
											2016-08-17 17:00:00 +08:00
										 |  |  | 			params = append(params, v) | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		sql.WriteString(")") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-14 14:36:44 +08:00
										 |  |  | 	if query.Limit != 0 { | 
					
						
							|  |  |  | 		sql.WriteString(" LIMIT ?") | 
					
						
							|  |  |  | 		params = append(params, query.Limit) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 14:07:14 +08:00
										 |  |  | 	sql.WriteString(" ORDER BY name ASC") | 
					
						
							| 
									
										
										
										
											2016-09-14 20:51:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | 	alerts := make([]*m.Alert, 0) | 
					
						
							| 
									
										
										
										
											2016-05-09 20:30:28 +08:00
										 |  |  | 	if err := x.Sql(sql.String(), params...).Find(&alerts); err != nil { | 
					
						
							| 
									
										
										
										
											2016-04-26 23:36:50 +08:00
										 |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	query.Result = alerts | 
					
						
							|  |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | func DeleteAlertDefinition(dashboardId int64, sess *xorm.Session) error { | 
					
						
							| 
									
										
										
										
											2016-06-11 16:54:24 +08:00
										 |  |  | 	alerts := make([]*m.Alert, 0) | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	sess.Where("dashboard_id = ?", dashboardId).Find(&alerts) | 
					
						
							| 
									
										
										
										
											2016-04-25 22:18:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	for _, alert := range alerts { | 
					
						
							| 
									
										
										
										
											2016-10-14 15:43:30 +08:00
										 |  |  | 		deleteAlertByIdInternal(alert.Id, "Dashboard deleted", sess) | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | func SaveAlerts(cmd *m.SaveAlertsCommand) error { | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	return inTransaction(func(sess *xorm.Session) error { | 
					
						
							| 
									
										
										
										
											2016-07-14 19:32:16 +08:00
										 |  |  | 		existingAlerts, err := GetAlertsByDashboardId2(cmd.DashboardId, sess) | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-22 22:51:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-14 19:32:16 +08:00
										 |  |  | 		if err := upsertAlerts(existingAlerts, cmd, sess); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if err := deleteMissingAlerts(existingAlerts, cmd, sess); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-22 22:51:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-14 19:32:16 +08:00
										 |  |  | func upsertAlerts(existingAlerts []*m.Alert, cmd *m.SaveAlertsCommand, sess *xorm.Session) error { | 
					
						
							| 
									
										
										
										
											2016-06-29 05:40:58 +08:00
										 |  |  | 	for _, alert := range cmd.Alerts { | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 		update := false | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | 		var alertToUpdate *m.Alert | 
					
						
							| 
									
										
										
										
											2016-04-25 22:18:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-14 19:32:16 +08:00
										 |  |  | 		for _, k := range existingAlerts { | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 			if alert.PanelId == k.PanelId { | 
					
						
							|  |  |  | 				update = true | 
					
						
							|  |  |  | 				alert.Id = k.Id | 
					
						
							|  |  |  | 				alertToUpdate = k | 
					
						
							| 
									
										
										
										
											2016-06-11 20:08:55 +08:00
										 |  |  | 				break | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 		if update { | 
					
						
							| 
									
										
										
										
											2016-06-10 04:21:28 +08:00
										 |  |  | 			if alertToUpdate.ContainsUpdates(alert) { | 
					
						
							| 
									
										
										
										
											2016-05-16 21:39:09 +08:00
										 |  |  | 				alert.Updated = time.Now() | 
					
						
							| 
									
										
										
										
											2016-04-28 14:42:51 +08:00
										 |  |  | 				alert.State = alertToUpdate.State | 
					
						
							| 
									
										
										
										
											2016-06-06 19:50:47 +08:00
										 |  |  | 				_, err := sess.Id(alert.Id).Update(alert) | 
					
						
							| 
									
										
										
										
											2016-04-25 22:18:28 +08:00
										 |  |  | 				if err != nil { | 
					
						
							|  |  |  | 					return err | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 16:54:24 +08:00
										 |  |  | 				sqlog.Debug("Alert updated", "name", alert.Name, "id", alert.Id) | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2016-05-16 21:39:09 +08:00
										 |  |  | 			alert.Updated = time.Now() | 
					
						
							|  |  |  | 			alert.Created = time.Now() | 
					
						
							| 
									
										
										
										
											2016-11-01 22:30:55 +08:00
										 |  |  | 			alert.State = m.AlertStatePending | 
					
						
							| 
									
										
										
										
											2016-08-16 22:50:36 +08:00
										 |  |  | 			alert.NewStateDate = time.Now() | 
					
						
							| 
									
										
										
										
											2016-07-14 19:32:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-06 19:50:47 +08:00
										 |  |  | 			_, err := sess.Insert(alert) | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							| 
									
										
										
										
											2016-04-22 22:51:24 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-06-11 16:54:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			sqlog.Debug("Alert inserted", "name", alert.Name, "id", alert.Id) | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-29 05:40:58 +08:00
										 |  |  | func deleteMissingAlerts(alerts []*m.Alert, cmd *m.SaveAlertsCommand, sess *xorm.Session) error { | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 	for _, missingAlert := range alerts { | 
					
						
							|  |  |  | 		missing := true | 
					
						
							| 
									
										
										
										
											2016-04-22 23:49:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-29 05:40:58 +08:00
										 |  |  | 		for _, k := range cmd.Alerts { | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 			if missingAlert.PanelId == k.PanelId { | 
					
						
							|  |  |  | 				missing = false | 
					
						
							| 
									
										
										
										
											2016-06-11 20:08:55 +08:00
										 |  |  | 				break | 
					
						
							| 
									
										
										
										
											2016-04-22 23:49:50 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-22 23:49:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 		if missing { | 
					
						
							| 
									
										
										
										
											2016-10-14 15:43:30 +08:00
										 |  |  | 			deleteAlertByIdInternal(missingAlert.Id, "Removed from dashboard", sess) | 
					
						
							| 
									
										
										
										
											2016-04-22 23:49:50 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 22:31:13 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | func GetAlertsByDashboardId2(dashboardId int64, sess *xorm.Session) ([]*m.Alert, error) { | 
					
						
							|  |  |  | 	alerts := make([]*m.Alert, 0) | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	err := sess.Where("dashboard_id = ?", dashboardId).Find(&alerts) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2016-06-11 16:26:48 +08:00
										 |  |  | 		return []*m.Alert{}, err | 
					
						
							| 
									
										
										
										
											2016-04-22 23:49:50 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 21:48:29 +08:00
										 |  |  | 	return alerts, nil | 
					
						
							| 
									
										
										
										
											2016-04-13 16:33:45 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-07-22 19:14:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func SetAlertState(cmd *m.SetAlertStateCommand) error { | 
					
						
							|  |  |  | 	return inTransaction(func(sess *xorm.Session) error { | 
					
						
							|  |  |  | 		alert := m.Alert{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if has, err := sess.Id(cmd.AlertId).Get(&alert); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} else if !has { | 
					
						
							|  |  |  | 			return fmt.Errorf("Could not find alert") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		alert.State = cmd.State | 
					
						
							| 
									
										
										
										
											2016-08-16 15:52:45 +08:00
										 |  |  | 		alert.StateChanges += 1 | 
					
						
							|  |  |  | 		alert.NewStateDate = time.Now() | 
					
						
							| 
									
										
										
										
											2016-09-14 20:35:05 +08:00
										 |  |  | 		alert.EvalData = cmd.EvalData | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-18 23:25:32 +08:00
										 |  |  | 		if cmd.Error == "" { | 
					
						
							|  |  |  | 			alert.ExecutionError = " " //without this space, xorm skips updating this field
 | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			alert.ExecutionError = cmd.Error | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-07-22 19:14:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-16 15:52:45 +08:00
										 |  |  | 		sess.Id(alert.Id).Update(&alert) | 
					
						
							| 
									
										
										
										
											2016-07-22 19:14:09 +08:00
										 |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-09-30 23:37:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-10 20:26:09 +08:00
										 |  |  | func PauseAlertRule(cmd *m.PauseAlertCommand) error { | 
					
						
							|  |  |  | 	return inTransaction(func(sess *xorm.Session) error { | 
					
						
							|  |  |  | 		alert := m.Alert{} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-14 15:58:22 +08:00
										 |  |  | 		has, err := x.Where("id = ? AND org_id=?", cmd.AlertId, cmd.OrgId).Get(&alert) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2016-10-10 20:26:09 +08:00
										 |  |  | 			return err | 
					
						
							|  |  |  | 		} else if !has { | 
					
						
							|  |  |  | 			return fmt.Errorf("Could not find alert") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var newState m.AlertStateType | 
					
						
							|  |  |  | 		if cmd.Paused { | 
					
						
							|  |  |  | 			newState = m.AlertStatePaused | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2016-11-01 22:58:38 +08:00
										 |  |  | 			newState = m.AlertStatePending | 
					
						
							| 
									
										
										
										
											2016-10-10 20:26:09 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		alert.State = newState | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		sess.Id(alert.Id).Update(&alert) | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-30 23:37:47 +08:00
										 |  |  | func GetAlertStatesForDashboard(query *m.GetAlertStatesForDashboardQuery) error { | 
					
						
							|  |  |  | 	var rawSql = `SELECT | 
					
						
							|  |  |  | 	                id, | 
					
						
							|  |  |  | 	                dashboard_id, | 
					
						
							|  |  |  | 	                panel_id, | 
					
						
							|  |  |  | 	                state, | 
					
						
							|  |  |  | 	                new_state_date | 
					
						
							|  |  |  | 	                FROM alert | 
					
						
							|  |  |  | 	                WHERE org_id = ? AND dashboard_id = ?` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	query.Result = make([]*m.AlertStateInfoDTO, 0) | 
					
						
							|  |  |  | 	err := x.Sql(rawSql, query.OrgId, query.DashboardId).Find(&query.Result) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return err | 
					
						
							|  |  |  | } |