mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
parent
1f1d232ea6
commit
650a87dc05
@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/middleware"
|
"github.com/grafana/grafana/pkg/middleware"
|
||||||
"github.com/grafana/grafana/pkg/models"
|
"github.com/grafana/grafana/pkg/models"
|
||||||
"github.com/grafana/grafana/pkg/services/alerting"
|
"github.com/grafana/grafana/pkg/services/alerting"
|
||||||
|
"github.com/grafana/grafana/pkg/services/annotations"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ValidateOrgAlert(c *middleware.Context) {
|
func ValidateOrgAlert(c *middleware.Context) {
|
||||||
@ -212,3 +213,34 @@ func DeleteAlertNotification(c *middleware.Context) Response {
|
|||||||
|
|
||||||
return ApiSuccess("Notification deleted")
|
return ApiSuccess("Notification deleted")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAlertHistory(c *middleware.Context) Response {
|
||||||
|
query := &annotations.ItemQuery{
|
||||||
|
AlertId: c.ParamsInt64("alertId"),
|
||||||
|
Type: annotations.AlertType,
|
||||||
|
OrgId: c.OrgId,
|
||||||
|
Limit: c.QueryInt64("limit"),
|
||||||
|
}
|
||||||
|
|
||||||
|
repo := annotations.GetRepository()
|
||||||
|
|
||||||
|
items, err := repo.Find(query)
|
||||||
|
if err != nil {
|
||||||
|
return ApiError(500, "Failed to get history for alert", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var result []dtos.AlertHistory
|
||||||
|
for _, item := range items {
|
||||||
|
result = append(result, dtos.AlertHistory{
|
||||||
|
AlertId: item.AlertId,
|
||||||
|
Timestamp: item.Timestamp,
|
||||||
|
Data: item.Data,
|
||||||
|
NewState: item.NewState,
|
||||||
|
Text: item.Text,
|
||||||
|
Metric: item.Metric,
|
||||||
|
Title: item.Title,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return Json(200, result)
|
||||||
|
}
|
||||||
|
@ -250,11 +250,12 @@ func Register(r *macaron.Macaron) {
|
|||||||
|
|
||||||
r.Group("/alerts", func() {
|
r.Group("/alerts", func() {
|
||||||
r.Post("/test", bind(dtos.AlertTestCommand{}), wrap(AlertTest))
|
r.Post("/test", bind(dtos.AlertTestCommand{}), wrap(AlertTest))
|
||||||
//r.Get("/:alertId/states", wrap(GetAlertStates))
|
|
||||||
r.Get("/:alertId", ValidateOrgAlert, wrap(GetAlert))
|
r.Get("/:alertId", ValidateOrgAlert, wrap(GetAlert))
|
||||||
r.Get("/", wrap(GetAlerts))
|
r.Get("/", wrap(GetAlerts))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
r.Get("/alert-history/:alertId", ValidateOrgAlert, wrap(GetAlertHistory))
|
||||||
|
|
||||||
r.Get("/alert-notifications", wrap(GetAlertNotifications))
|
r.Get("/alert-notifications", wrap(GetAlertNotifications))
|
||||||
|
|
||||||
r.Group("/alert-notifications", func() {
|
r.Group("/alert-notifications", func() {
|
||||||
|
@ -52,3 +52,14 @@ type EvalMatch struct {
|
|||||||
Metric string `json:"metric"`
|
Metric string `json:"metric"`
|
||||||
Value float64 `json:"value"`
|
Value float64 `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AlertHistory struct {
|
||||||
|
AlertId int64 `json:"alertId"`
|
||||||
|
NewState string `json:"netState"`
|
||||||
|
Timestamp time.Time `json:"timestamp"`
|
||||||
|
Title string `json:"title"`
|
||||||
|
Text string `json:"text"`
|
||||||
|
Metric string `json:"metric"`
|
||||||
|
|
||||||
|
Data *simplejson.Json `json:"data"`
|
||||||
|
}
|
||||||
|
@ -8,6 +8,15 @@ import (
|
|||||||
|
|
||||||
type Repository interface {
|
type Repository interface {
|
||||||
Save(item *Item) error
|
Save(item *Item) error
|
||||||
|
Find(query *ItemQuery) ([]*Item, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type ItemQuery struct {
|
||||||
|
OrgId int64 `json:"orgId"`
|
||||||
|
Type ItemType `json:"type"`
|
||||||
|
AlertId int64 `json:"alertId"`
|
||||||
|
|
||||||
|
Limit int64 `json:"alertId"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var repositoryInstance Repository
|
var repositoryInstance Repository
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/go-xorm/xorm"
|
"github.com/go-xorm/xorm"
|
||||||
"github.com/grafana/grafana/pkg/services/annotations"
|
"github.com/grafana/grafana/pkg/services/annotations"
|
||||||
)
|
)
|
||||||
@ -17,5 +20,39 @@ func (r *SqlAnnotationRepo) Save(item *annotations.Item) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SqlAnnotationRepo) Find(query *annotations.ItemQuery) ([]*annotations.Item, error) {
|
||||||
|
var sql bytes.Buffer
|
||||||
|
params := make([]interface{}, 0)
|
||||||
|
|
||||||
|
sql.WriteString(`SELECT *
|
||||||
|
from annotation
|
||||||
|
`)
|
||||||
|
|
||||||
|
sql.WriteString(`WHERE org_id = ?`)
|
||||||
|
params = append(params, query.OrgId)
|
||||||
|
|
||||||
|
if query.AlertId != 0 {
|
||||||
|
sql.WriteString(` AND alert_id = ?`)
|
||||||
|
params = append(params, query.AlertId)
|
||||||
|
}
|
||||||
|
|
||||||
|
if query.Type != "" {
|
||||||
|
sql.WriteString(` AND type = ?`)
|
||||||
|
params = append(params, string(query.Type))
|
||||||
|
}
|
||||||
|
|
||||||
|
if query.Limit == 0 {
|
||||||
|
query.Limit = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.WriteString(fmt.Sprintf("ORDER BY timestamp DESC LIMIT %v", query.Limit))
|
||||||
|
|
||||||
|
items := make([]*annotations.Item, 0)
|
||||||
|
if err := x.Sql(sql.String(), params...).Find(&items); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return items, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user