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;