diff --git a/pkg/services/alerting/result_handler.go b/pkg/services/alerting/result_handler.go index eeb4f57c1ec..b0830726cb0 100644 --- a/pkg/services/alerting/result_handler.go +++ b/pkg/services/alerting/result_handler.go @@ -39,6 +39,7 @@ func (handler *DefaultResultHandler) Handle(ctx *EvalContext) { } countSeverity(ctx.Rule.Severity) + if ctx.Rule.State != oldState { handler.log.Info("New state change", "alertId", ctx.Rule.Id, "newState", ctx.Rule.State, "oldState", oldState) diff --git a/pkg/services/annotations/annotations.go b/pkg/services/annotations/annotations.go index 005651630a0..fd8c8ebdb9a 100644 --- a/pkg/services/annotations/annotations.go +++ b/pkg/services/annotations/annotations.go @@ -27,18 +27,17 @@ const ( ) type Item struct { - Id int64 `json:"id"` - OrgId int64 `json:"orgId"` - PanelLinkId string `json:"panelLinkId"` - Type ItemType `json:"type"` - Title string `json:"title"` - Text string `json:"text"` - Metric string `json:"metric"` - AlertId int64 `json:"alertId"` - UserId int64 `json:"userId"` - PrevState string `json:"prevState"` - NewState string `json:"newState"` - Timestamp time.Time `json:"timestamp"` + Id int64 `json:"id"` + OrgId int64 `json:"orgId"` + Type ItemType `json:"type"` + Title string `json:"title"` + Text string `json:"text"` + Metric string `json:"metric"` + AlertId int64 `json:"alertId"` + UserId int64 `json:"userId"` + PrevState string `json:"prevState"` + NewState string `json:"newState"` + Timestamp time.Time `json:"timestamp"` Data *simplejson.Json `json:"data"` } diff --git a/pkg/services/sqlstore/migrations/alert_mig.go b/pkg/services/sqlstore/migrations/alert_mig.go index fa54fe9ece0..342c2282933 100644 --- a/pkg/services/sqlstore/migrations/alert_mig.go +++ b/pkg/services/sqlstore/migrations/alert_mig.go @@ -20,28 +20,30 @@ func addAlertMigrations(mg *Migrator) { {Name: "frequency", Type: DB_BigInt, Nullable: false}, {Name: "handler", Type: DB_BigInt, Nullable: false}, {Name: "severity", Type: DB_Text, Nullable: false}, - {Name: "enabled", Type: DB_Bool, Nullable: false}, + {Name: "paused", Type: DB_Bool, Nullable: false}, + {Name: "silenced", Type: DB_Bool, Nullable: false}, + {Name: "execution_error", Type: DB_Text, Nullable: false}, + {Name: "last_eval_data", Type: DB_Text, Nullable: false}, + {Name: "last_eval_time", Type: DB_DateTime, Nullable: false}, {Name: "created", Type: DB_DateTime, Nullable: false}, {Name: "updated", Type: DB_DateTime, Nullable: false}, {Name: "updated_by", Type: DB_BigInt, Nullable: false}, {Name: "created_by", Type: DB_BigInt, Nullable: false}, }, + Indices: []*Index{ + {Cols: []string{"org_id", "id"}, Type: IndexType}, + {Cols: []string{"state"}, Type: IndexType}, + {Cols: []string{"dashboard_id"}, Type: IndexType}, + }, } // create table mg.AddMigration("create alert table v1", NewAddTableMigration(alertV1)) - alert_heartbeat := Table{ - Name: "alert_heartbeat", - Columns: []*Column{ - {Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true}, - {Name: "server_id", Type: DB_NVarchar, Length: 50, Nullable: false}, - {Name: "created", Type: DB_DateTime, Nullable: false}, - {Name: "updated", Type: DB_DateTime, Nullable: false}, - }, - } - - mg.AddMigration("create alert_heartbeat table v1", NewAddTableMigration(alert_heartbeat)) + // create indices + mg.AddMigration("add index alert org_id & id ", NewAddIndexMigration(alertV1, alertV1.Indices[0])) + mg.AddMigration("add index alert state", NewAddIndexMigration(alertV1, alertV1.Indices[1])) + mg.AddMigration("add index alert dashboard_id", NewAddIndexMigration(alertV1, alertV1.Indices[2])) alert_notification := Table{ Name: "alert_notification", @@ -54,7 +56,11 @@ func addAlertMigrations(mg *Migrator) { {Name: "created", Type: DB_DateTime, Nullable: false}, {Name: "updated", Type: DB_DateTime, Nullable: false}, }, + Indices: []*Index{ + {Cols: []string{"org_id", "name"}, Type: UniqueIndex}, + }, } mg.AddMigration("create alert_notification table v1", NewAddTableMigration(alert_notification)) + mg.AddMigration("add index alert_notification org_id & name", NewAddIndexMigration(alert_notification, alert_notification.Indices[0])) } diff --git a/pkg/services/sqlstore/migrations/annotation_mig.go b/pkg/services/sqlstore/migrations/annotation_mig.go index 64b5f948d66..af8d1cf0a03 100644 --- a/pkg/services/sqlstore/migrations/annotation_mig.go +++ b/pkg/services/sqlstore/migrations/annotation_mig.go @@ -12,7 +12,6 @@ func addAnnotationMig(mg *Migrator) { {Name: "org_id", Type: DB_BigInt, Nullable: false}, {Name: "alert_id", Type: DB_BigInt, Nullable: true}, {Name: "user_id", Type: DB_BigInt, Nullable: true}, - {Name: "panel_link_id", Type: DB_NVarchar, Length: 32, Nullable: false}, {Name: "type", Type: DB_NVarchar, Length: 25, Nullable: false}, {Name: "title", Type: DB_Text, Nullable: false}, {Name: "text", Type: DB_Text, Nullable: false}, @@ -25,7 +24,6 @@ func addAnnotationMig(mg *Migrator) { Indices: []*Index{ {Cols: []string{"org_id", "alert_id"}, Type: IndexType}, {Cols: []string{"org_id", "type"}, Type: IndexType}, - {Cols: []string{"org_id", "panel_link_id"}, Type: IndexType}, {Cols: []string{"timestamp"}, Type: IndexType}, }, } @@ -35,6 +33,5 @@ func addAnnotationMig(mg *Migrator) { // create indices mg.AddMigration("add index annotation org_id & alert_id ", NewAddIndexMigration(table, table.Indices[0])) mg.AddMigration("add index annotation org_id & type", NewAddIndexMigration(table, table.Indices[1])) - mg.AddMigration("add index annotation org_id & panel_link_id ", NewAddIndexMigration(table, table.Indices[2])) - mg.AddMigration("add index annotation timestamp", NewAddIndexMigration(table, table.Indices[3])) + mg.AddMigration("add index annotation timestamp", NewAddIndexMigration(table, table.Indices[2])) } diff --git a/pkg/services/sqlstore/migrations/heartbeat_mig.go b/pkg/services/sqlstore/migrations/heartbeat_mig.go new file mode 100644 index 00000000000..6d0213eac4b --- /dev/null +++ b/pkg/services/sqlstore/migrations/heartbeat_mig.go @@ -0,0 +1,16 @@ +package migrations + +// +// alert_heartbeat := Table{ +// Name: "alert_heartbeat", +// Columns: []*Column{ +// {Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true}, +// {Name: "server_id", Type: DB_NVarchar, Length: 50, Nullable: false}, +// {Name: "created", Type: DB_DateTime, Nullable: false}, +// {Name: "updated", Type: DB_DateTime, Nullable: false}, +// }, +// } +// +// mg.AddMigration("create alert_heartbeat table v1", NewAddTableMigration(alert_heartbeat)) +// +// diff --git a/public/app/core/components/query_part/query_part_editor.ts b/public/app/core/components/query_part/query_part_editor.ts index 91021b5f7c5..4699f529b20 100644 --- a/public/app/core/components/query_part/query_part_editor.ts +++ b/public/app/core/components/query_part/query_part_editor.ts @@ -64,7 +64,9 @@ export function queryPartEditorDirective($compile, templateSrv) { $link.html(templateSrv.highlightVariablesAsHtml(newValue)); part.updateParam($input.val(), paramIndex); - $scope.$apply($scope.partUpdated); + $scope.$apply(() => { + $scope.handleEvent({$event: {name: 'part-param-changed'}}); + }); } $input.hide(); diff --git a/public/app/features/alerting/alert_tab_ctrl.ts b/public/app/features/alerting/alert_tab_ctrl.ts index 3ca46dd9fda..684b3071113 100644 --- a/public/app/features/alerting/alert_tab_ctrl.ts +++ b/public/app/features/alerting/alert_tab_ctrl.ts @@ -167,7 +167,7 @@ export class AlertTabCtrl { addCondition(type) { var condition = this.buildDefaultCondition(); // add to persited model - this.alert.conditions.push(condition); + this.panelCtrl.conditions.push(condition); // add to view model this.conditionModels.push(this.buildConditionModel(condition)); } diff --git a/public/app/plugins/datasource/influxdb/partials/query.editor.html b/public/app/plugins/datasource/influxdb/partials/query.editor.html index 53a2ac75ef4..df5c326b962 100644 --- a/public/app/plugins/datasource/influxdb/partials/query.editor.html +++ b/public/app/plugins/datasource/influxdb/partials/query.editor.html @@ -57,11 +57,9 @@ GROUP BY - + diff --git a/public/app/plugins/datasource/influxdb/query_ctrl.ts b/public/app/plugins/datasource/influxdb/query_ctrl.ts index 577902668dd..c5c94b776b1 100644 --- a/public/app/plugins/datasource/influxdb/query_ctrl.ts +++ b/public/app/plugins/datasource/influxdb/query_ctrl.ts @@ -106,19 +106,11 @@ export class InfluxQueryCtrl extends QueryCtrl { this.panelCtrl.refresh(); } - removeGroupByPart(part, index) { - this.queryModel.removeGroupByPart(part, index); - this.panelCtrl.refresh(); - } - addSelectPart(selectParts, cat, subitem) { this.queryModel.addSelectPart(selectParts, subitem.value); this.panelCtrl.refresh(); } - removeSelectPart(selectParts, part) { - } - handleSelectPartEvent(selectParts, part, evt) { switch (evt.name) { case "get-param-options": { @@ -127,9 +119,14 @@ export class InfluxQueryCtrl extends QueryCtrl { .then(this.transformToSegments(true)) .catch(this.handleQueryError.bind(this)); } + case "part-param-changed": { + this.panelCtrl.refresh(); + break; + } case "action-remove-part": { this.queryModel.removeSelectPart(selectParts, part); this.panelCtrl.refresh(); + break; } case "get-part-actions": { return this.$q.when([{text: 'Remove', value: 'remove-part'}]); @@ -137,8 +134,27 @@ export class InfluxQueryCtrl extends QueryCtrl { } } - selectPartUpdated() { - this.panelCtrl.refresh(); + handleGroupByPartEvent(part, index, evt) { + switch (evt.name) { + case "get-param-options": { + var tagsQuery = this.queryBuilder.buildExploreQuery('TAG_KEYS'); + return this.datasource.metricFindQuery(tagsQuery) + .then(this.transformToSegments(true)) + .catch(this.handleQueryError.bind(this)); + } + case "part-param-changed": { + this.panelCtrl.refresh(); + break; + } + case "action-remove-part": { + this.queryModel.removeGroupByPart(part, index); + this.panelCtrl.refresh(); + break; + } + case "get-part-actions": { + return this.$q.when([{text: 'Remove', value: 'remove-part'}]); + } + } } fixTagSegments() { @@ -183,21 +199,6 @@ export class InfluxQueryCtrl extends QueryCtrl { .catch(this.handleQueryError.bind(this)); } - getPartOptions(part) { - if (part.def.type === 'field') { - var fieldsQuery = this.queryBuilder.buildExploreQuery('FIELDS'); - return this.datasource.metricFindQuery(fieldsQuery) - .then(this.transformToSegments(true)) - .catch(this.handleQueryError.bind(this)); - } - if (part.def.type === 'tag') { - var tagsQuery = this.queryBuilder.buildExploreQuery('TAG_KEYS'); - return this.datasource.metricFindQuery(tagsQuery) - .then(this.transformToSegments(true)) - .catch(this.handleQueryError.bind(true)); - } - } - handleQueryError(err) { this.error = err.message || 'Failed to issue metric query'; return []; @@ -259,11 +260,6 @@ export class InfluxQueryCtrl extends QueryCtrl { .catch(this.handleQueryError); } - setFill(fill) { - this.target.fill = fill; - this.panelCtrl.refresh(); - } - tagSegmentUpdated(segment, index) { this.tagSegments[index] = segment;