From 593b2ef866e96bfaa8c2db568de234a2e38d70cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 12 Apr 2017 16:26:34 +0200 Subject: [PATCH] annotation: added region support to annoations --- pkg/api/annotations.go | 22 ++++++++++++++++--- pkg/api/dtos/annotations.go | 5 +++++ pkg/services/annotations/annotations.go | 2 ++ pkg/services/sqlstore/annotation.go | 11 ++++++++++ .../sqlstore/migrations/annotation_mig.go | 4 ++++ 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/pkg/api/annotations.go b/pkg/api/annotations.go index 88e8c955497..a7783e4be88 100644 --- a/pkg/api/annotations.go +++ b/pkg/api/annotations.go @@ -40,6 +40,7 @@ func GetAnnotations(c *middleware.Context) Response { Metric: item.Metric, Title: item.Title, PanelId: item.PanelId, + RegionId: item.RegionId, }) } @@ -57,15 +58,30 @@ func PostAnnotation(c *middleware.Context, cmd dtos.PostAnnotationsCmd) Response Title: cmd.Title, Text: cmd.Text, CategoryId: cmd.CategoryId, + NewState: cmd.FillColor, Type: annotations.EventType, } - err := repo.Save(&item) - - if err != nil { + if err := repo.Save(&item); err != nil { return ApiError(500, "Failed to save annotation", err) } + // handle regions + if cmd.IsRegion { + item.RegionId = item.Id + + if err := repo.Update(&item); err != nil { + return ApiError(500, "Failed set regionId on annotation", err) + } + + item.Id = 0 + item.Epoch = cmd.EndTime + + if err := repo.Save(&item); err != nil { + return ApiError(500, "Failed save annotation for region end time", err) + } + } + return ApiSuccess("Annotation added") } diff --git a/pkg/api/dtos/annotations.go b/pkg/api/dtos/annotations.go index 28e048db3ec..bd9dd06c457 100644 --- a/pkg/api/dtos/annotations.go +++ b/pkg/api/dtos/annotations.go @@ -12,6 +12,7 @@ type Annotation struct { Title string `json:"title"` Text string `json:"text"` Metric string `json:"metric"` + RegionId int64 `json:"regionId"` Data *simplejson.Json `json:"data"` } @@ -23,6 +24,10 @@ type PostAnnotationsCmd struct { Time int64 `json:"time"` Title string `json:"title"` Text string `json:"text"` + + FillColor string `json:"fillColor"` + IsRegion bool `json:"isRegion"` + EndTime int64 `json:"endTime"` } type DeleteAnnotationsCmd struct { diff --git a/pkg/services/annotations/annotations.go b/pkg/services/annotations/annotations.go index a3b4eacc0c3..be9d3f2d4d0 100644 --- a/pkg/services/annotations/annotations.go +++ b/pkg/services/annotations/annotations.go @@ -4,6 +4,7 @@ import "github.com/grafana/grafana/pkg/components/simplejson" type Repository interface { Save(item *Item) error + Update(item *Item) error Find(query *ItemQuery) ([]*Item, error) Delete(params *DeleteParams) error } @@ -58,6 +59,7 @@ type Item struct { DashboardId int64 `json:"dashboardId"` PanelId int64 `json:"panelId"` CategoryId int64 `json:"categoryId"` + RegionId int64 `json:"regionId"` Type ItemType `json:"type"` Title string `json:"title"` Text string `json:"text"` diff --git a/pkg/services/sqlstore/annotation.go b/pkg/services/sqlstore/annotation.go index e219f48d2fe..62a10ee2106 100644 --- a/pkg/services/sqlstore/annotation.go +++ b/pkg/services/sqlstore/annotation.go @@ -23,6 +23,17 @@ func (r *SqlAnnotationRepo) Save(item *annotations.Item) error { }) } +func (r *SqlAnnotationRepo) Update(item *annotations.Item) error { + return inTransaction(func(sess *xorm.Session) error { + + if _, err := sess.Table("annotation").Id(item.Id).Update(item); err != nil { + return err + } + + return nil + }) +} + func (r *SqlAnnotationRepo) Find(query *annotations.ItemQuery) ([]*annotations.Item, error) { var sql bytes.Buffer params := make([]interface{}, 0) diff --git a/pkg/services/sqlstore/migrations/annotation_mig.go b/pkg/services/sqlstore/migrations/annotation_mig.go index 4a7206f9d64..aeb2afed4fb 100644 --- a/pkg/services/sqlstore/migrations/annotation_mig.go +++ b/pkg/services/sqlstore/migrations/annotation_mig.go @@ -54,4 +54,8 @@ func addAnnotationMig(mg *Migrator) { {Name: "new_state", Type: DB_NVarchar, Length: 25, Nullable: false}, {Name: "data", Type: DB_Text, Nullable: false}, })) + + mg.AddMigration("Add column region_id to annotation table", NewAddColumnMigration(table, &Column{ + Name: "region_id", Type: DB_BigInt, Nullable: true, Default: "0", + })) }