Przeglądaj źródła

Merge branch 'master' into query_troubleshooting

Torkel Ödegaard 8 lat temu
rodzic
commit
d5481fa0f1

+ 3 - 0
CHANGELOG.md

@@ -3,6 +3,9 @@
 ## Bug fixes
 
 * **Graphite**: Fixed issue with Toggle edit mode did in query editor [#8377](https://github.com/grafana/grafana/issues/8377)
+* **Alerting**: Fixed issue with state history not showing query execution errors [#8412](https://github.com/grafana/grafana/issues/8412)
+* **Alerting**: Fixed issue with missing state history events/annotations when using sqlite3 database [#7992](https://github.com/grafana/grafana/issues/7992)
+* **Sqlite**: Fixed with database table locked and using sqlite3 database [#7992](https://github.com/grafana/grafana/issues/7992)
 
 # 4.3.0-beta1 (2017-05-12)
 

+ 5 - 7
pkg/services/alerting/result_handler.go

@@ -31,17 +31,15 @@ func (handler *DefaultResultHandler) Handle(evalContext *EvalContext) error {
 	executionError := ""
 	annotationData := simplejson.New()
 
-	if evalContext.Firing {
-		annotationData = simplejson.NewFromAny(evalContext.EvalMatches)
+	if len(evalContext.EvalMatches) > 0 {
+		annotationData.Set("evalMatches", simplejson.NewFromAny(evalContext.EvalMatches))
 	}
 
 	if evalContext.Error != nil {
 		executionError = evalContext.Error.Error()
-		annotationData.Set("errorMessage", executionError)
-	}
-
-	if evalContext.NoDataFound {
-		annotationData.Set("no_data", true)
+		annotationData.Set("error", executionError)
+	} else if evalContext.NoDataFound {
+		annotationData.Set("noData", true)
 	}
 
 	countStateResult(evalContext.Rule.State)

+ 24 - 1
public/app/features/alerting/alert_def.ts

@@ -131,6 +131,29 @@ function joinEvalMatches(matches, separator: string) {
   }, []).join(separator);
 }
 
+function getAlertAnnotationInfo(ah) {
+
+  // backward compatability, can be removed in grafana 5.x
+  // old way stored evalMatches in data property directly,
+  // new way stores it in evalMatches property on new data object
+
+  if (_.isArray(ah.data)) {
+    return joinEvalMatches(ah.data, ', ');
+  } else if (_.isArray(ah.data.evalMatches)) {
+    return joinEvalMatches(ah.data.evalMatches, ', ');
+  }
+
+  if (ah.data.error) {
+    return "Error: " + ah.data.error;
+  }
+
+  if (ah.data.noData || ah.data.no_data) {
+    return "No Data";
+  }
+
+  return "";
+}
+
 export default {
   alertQueryDef: alertQueryDef,
   getStateDisplayModel: getStateDisplayModel,
@@ -141,6 +164,6 @@ export default {
   executionErrorModes: executionErrorModes,
   reducerTypes: reducerTypes,
   createReducerPart: createReducerPart,
-  joinEvalMatches: joinEvalMatches,
+  getAlertAnnotationInfo: getAlertAnnotationInfo,
   alertStateSortScore: alertStateSortScore,
 };

+ 1 - 10
public/app/features/alerting/alert_tab_ctrl.ts

@@ -81,16 +81,7 @@ export class AlertTabCtrl {
       this.alertHistory = _.map(res, ah => {
         ah.time = moment(ah.time).format('MMM D, YYYY HH:mm:ss');
         ah.stateModel = alertDef.getStateDisplayModel(ah.newState);
-        ah.metrics = alertDef.joinEvalMatches(ah.data, ', ');
-
-        if (ah.data.errorMessage) {
-          ah.metrics = "Error: " + ah.data.errorMessage;
-        }
-
-        if (ah.data.no_data) {
-          ah.metrics = "(due to no data)";
-        }
-
+        ah.info = alertDef.getAlertAnnotationInfo(ah);
         return ah;
       });
     });

+ 7 - 3
public/app/features/alerting/partials/alert_tab.html

@@ -148,16 +148,20 @@
 				<ol class="card-list" >
 					<li class="card-item-wrapper" ng-repeat="ah in ctrl.alertHistory">
 						<div class="card-item card-item--alert">
+              <div class="card-item-header">
+                <div class="card-item-type">
+                </div>
+              </div>
 							<div class="card-item-body">
 								<div class="card-item-details">
 									<div class="card-item-sub-name">
 										<span class="alert-list-item-state {{ah.stateModel.stateClass}}">
 											<i class="{{ah.stateModel.iconClass}}"></i>
-											{{ah.stateModel.text}}
-										</span> {{ah.metrics}}
+                      {{ah.stateModel.text}}
+                    </span> {{ah.time}}
 									</div>
 									<div class="card-item-sub-name">
-										{{ah.time}}
+										{{ah.info}}
 									</div>
 								</div>
 							</div>

+ 1 - 1
public/app/plugins/panel/alertlist/module.html

@@ -40,7 +40,7 @@
                 <span class="alert-list-item-state {{al.stateModel.stateClass}}">
                   <i class="{{al.stateModel.iconClass}}"></i>
                   {{al.stateModel.text}}
-                </span> {{al.metrics}}
+                </span> {{al.info}}
               </div>
             </div>
           </div>

+ 1 - 1
public/app/plugins/panel/alertlist/module.ts

@@ -106,7 +106,7 @@ class AlertListPanel extends PanelCtrl {
         this.alertHistory = _.map(res, al => {
           al.time = moment(al.time).format('MMM D, YYYY HH:mm:ss');
           al.stateModel = alertDef.getStateDisplayModel(al.newState);
-          al.metrics = alertDef.joinEvalMatches(al.data, ', ');
+          al.info = alertDef.getAlertAnnotationInfo(al);
           return al;
         });
       });

+ 1 - 0
public/sass/components/edit_sidemenu.scss

@@ -26,6 +26,7 @@
     display: block;
     color: $text-color;
     margin: 0 0 1.5rem 1rem;
+    white-space: nowrap;
   }
 }