Browse Source

feat(query_part): refactoring query part

Torkel Ödegaard 9 years ago
parent
commit
1418cbbd8b

+ 1 - 0
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)
 

+ 11 - 12
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"`
 }

+ 18 - 12
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]))
 }

+ 1 - 4
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]))
 }

+ 16 - 0
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))
+//
+//

+ 3 - 1
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();

+ 1 - 1
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));
   }

+ 3 - 5
public/app/plugins/datasource/influxdb/partials/query.editor.html

@@ -57,11 +57,9 @@
 					<span>GROUP BY</span>
 				</label>
 
-				<query-part-editor
-								ng-repeat="part in ctrl.queryModel.groupByParts"
-								part="part"
-								class="gf-form-label query-part"
-								remove-action="ctrl.removeGroupByPart(part, $index)" part-updated="ctrl.refresh();" get-options="ctrl.getPartOptions(part)">
+				<query-part-editor  ng-repeat="part in ctrl.queryModel.groupByParts"
+                            part="part" class="gf-form-label query-part"
+                            handle-event="ctrl.handleGroupByPartEvent(part, $index, $event)">
 				</query-part-editor>
 			</div>
 

+ 26 - 30
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;