浏览代码

AMBARI-1252. Fetch Nagios alerts through Ambari Server and not directly from Nagios Server. (srimanth via yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1438294 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 12 年之前
父节点
当前提交
361652af66

+ 4 - 0
CHANGES.txt

@@ -12,7 +12,11 @@ Trunk (unreleased changes):
 
 
  NEW FEATURES
  NEW FEATURES
 
 
+ AMBARI-1252. Fetch Nagios alerts through Ambari Server and not directly
+ from Nagios Server. (srimanth via yusaku)
+
  AMBARI-1237. Expose Nagios alerts via Rest API. (Nate Cole via jspeidel)
  AMBARI-1237. Expose Nagios alerts via Rest API. (Nate Cole via jspeidel)
+
  AMBARI-1163. During agent registration and heartbeat, send information about
  AMBARI-1163. During agent registration and heartbeat, send information about
  various hadoop artifacts back to Ambari. (Nate Cole via mahadev)
  various hadoop artifacts back to Ambari. (Nate Cole via mahadev)
 
 

文件差异内容过多而无法显示
+ 7 - 426
ambari-web/app/assets/data/alerts/alerts.json


+ 2 - 9
ambari-web/app/controllers/global/cluster_controller.js

@@ -210,10 +210,9 @@ App.ClusterController = Em.Controller.extend({
       if (lastSlash > -1) {
       if (lastSlash > -1) {
         nagiosUrl = nagiosUrl.substring(0, lastSlash);
         nagiosUrl = nagiosUrl.substring(0, lastSlash);
       }
       }
-      var dataUrl;
+      var dataUrl = this.getUrl('/data/alerts/alerts.json', '/host_components?HostRoles/component_name=NAGIOS_SERVER&fields=HostRoles/nagios_alerts');
       var ajaxOptions = {
       var ajaxOptions = {
-        dataType:"jsonp",
-        jsonp:"jsonp",
+        dataType:"json",
         context:this,
         context:this,
         complete:function (jqXHR, textStatus) {
         complete:function (jqXHR, textStatus) {
           this.updateLoadStatus('alerts');
           this.updateLoadStatus('alerts');
@@ -224,12 +223,6 @@ App.ClusterController = Em.Controller.extend({
           console.log('Nagios $.ajax() response:', error);
           console.log('Nagios $.ajax() response:', error);
         }
         }
       };
       };
-      if (App.testMode) {
-        dataUrl = "/data/alerts/alerts.jsonp";
-        ajaxOptions.jsonpCallback = "jQuery172040994187095202506_1352498338217";
-      } else {
-        dataUrl = nagiosUrl + "/hdp/nagios/nagios_alerts.php?q1=alerts&alert_type=all";
-      }
       App.HttpClient.get(dataUrl, App.alertsMapper, ajaxOptions);
       App.HttpClient.get(dataUrl, App.alertsMapper, ajaxOptions);
     } else {
     } else {
       this.updateLoadStatus('alerts');
       this.updateLoadStatus('alerts');

+ 7 - 5
ambari-web/app/mappers/alerts_mapper.js

@@ -41,26 +41,28 @@ App.alertsMapper = App.QuickDataMapper.create({
     if (!this.get('model')) {
     if (!this.get('model')) {
       return;
       return;
     }
     }
-    if (json.alerts) {
+    if (json && json.items && json.items.length>0 && json.items[0].HostRoles && json.items[0].HostRoles.nagios_alerts) {
+      var alertsString = json.items[0].HostRoles.nagios_alerts;
+      var alerts = jQuery.parseJSON(alertsString).alerts;
       if (App.Alert.find().content.length > 0) {
       if (App.Alert.find().content.length > 0) {
-        this.update(json);
+        this.update(alerts);
       } else {
       } else {
         var result = [];
         var result = [];
-        json.alerts.forEach(function (item) {
+        alerts.forEach(function (item) {
           result.push(this.parseIt(item, this.config));
           result.push(this.parseIt(item, this.config));
         }, this);
         }, this);
         App.store.loadMany(this.get('model'), result);
         App.store.loadMany(this.get('model'), result);
       }
       }
     }
     }
   },
   },
-  update: function(json){
+  update: function(alerts){
     var alertsList = App.Alert.find();
     var alertsList = App.Alert.find();
     var titleToAlertMap = {};
     var titleToAlertMap = {};
     alertsList.forEach(function(alert){
     alertsList.forEach(function(alert){
       titleToAlertMap[alert.get('serviceType') + alert.get('title') + alert.get('message')] = alert;
       titleToAlertMap[alert.get('serviceType') + alert.get('title') + alert.get('message')] = alert;
     });
     });
     var newRecords = [];
     var newRecords = [];
-    json.alerts.forEach(function(item){
+    alerts.forEach(function(item){
       var existAlert = titleToAlertMap[item.service_type + item.service_description + item.plugin_output];
       var existAlert = titleToAlertMap[item.service_type + item.service_description + item.plugin_output];
       if (existAlert == null) {
       if (existAlert == null) {
         newRecords.push(this.parseIt(item, this.config));
         newRecords.push(this.parseIt(item, this.config));

部分文件因为文件数量过多而无法显示