Explorar o código

fix: alert list panel now works correctly after adding manual annotation on dashboard, fixes #9951

Torkel Ödegaard %!s(int64=8) %!d(string=hai) anos
pai
achega
0d12b37dfd

+ 1 - 0
CHANGELOG.md

@@ -37,6 +37,7 @@
 
 ## Fixes
 * **Gzip**: Fixes bug gravatar images when gzip was enabled [#5952](https://github.com/grafana/grafana/issues/5952)
+* **Alert list**: Now shows alert state changes even after adding manual annotations on dashboard [#9951](https://github.com/grafana/grafana/issues/9951)
 
 # 4.6.2 (2017-11-16)
 

+ 1 - 0
pkg/api/annotations.go

@@ -22,6 +22,7 @@ func GetAnnotations(c *middleware.Context) Response {
 		PanelId:     c.QueryInt64("panelId"),
 		Limit:       c.QueryInt64("limit"),
 		Tags:        c.QueryStrings("tags"),
+		Type:        c.Query("type"),
 	}
 
 	repo := annotations.GetRepository()

+ 1 - 0
pkg/services/annotations/annotations.go

@@ -17,6 +17,7 @@ type ItemQuery struct {
 	DashboardId int64    `json:"dashboardId"`
 	PanelId     int64    `json:"panelId"`
 	Tags        []string `json:"tags"`
+	Type        string   `json:"type"`
 
 	Limit int64 `json:"limit"`
 }

+ 4 - 0
pkg/services/sqlstore/annotation.go

@@ -158,6 +158,10 @@ func (r *SqlAnnotationRepo) Find(query *annotations.ItemQuery) ([]*annotations.I
 		params = append(params, query.From, query.To)
 	}
 
+	if query.Type == "alert" {
+		sql.WriteString(` AND annotation.alert_id > 0`)
+	}
+
 	if len(query.Tags) > 0 {
 		keyValueFilters := []string{}
 

+ 14 - 0
pkg/services/sqlstore/annotation_test.go

@@ -42,6 +42,7 @@ func TestAnnotations(t *testing.T) {
 				UserId:      1,
 				DashboardId: 1,
 				Text:        "hello",
+				Type:        "alert",
 				Epoch:       10,
 				Tags:        []string{"outage", "error", "type:outage", "server:server-1"},
 			}
@@ -91,6 +92,19 @@ func TestAnnotations(t *testing.T) {
 				So(items, ShouldHaveLength, 0)
 			})
 
+			Convey("Should not find one when type filter does not match", func() {
+				items, err := repo.Find(&annotations.ItemQuery{
+					OrgId:       1,
+					DashboardId: 1,
+					From:        1,
+					To:          15,
+					Type:        "alert",
+				})
+
+				So(err, ShouldBeNil)
+				So(items, ShouldHaveLength, 0)
+			})
+
 			Convey("Should find one when all tag filters does match", func() {
 				items, err := repo.Find(&annotations.ItemQuery{
 					OrgId:       1,