Name

sn_em_connector.GrafanaPushConnectorScript

Description

Script to create events with new payload for Grafana Push Connector

Script

var GrafanaPushConnectorScript = Class.create();
GrafanaPushConnectorScript.prototype = {
  initialize: function() {},

  alerts: function(request, requestBody, params) {

      var source_label = params['source_label'];
      var sys_id = params['sys_id'];
      var eventClass = params['event_class'];
      var connectorTags = params['connector_tags'];

      var payload = requestBody;
      var alerts = payload.alerts;
      var orgId = payload.orgId;
      var responseBody = {};
      responseBody.eventSysIds = [];
      //if severity is passed in labels 
      var severity = {
          'CRITICAL': '1',
          'MAJOR': '2',
          'MINOR': '3',
          'WARNING': '4'
      };

      for (var i = 0; i < alerts.length; i++) {

          var annotations = alerts[i].annotations;
          var labels = alerts[i].labels;
          var status = alerts[i].status;
          var start_time = alerts[i].startsAt;
          var end_time = alerts[i].endsAt;
          var response, additional_info;

          var event_GR = new sn_em_connector.PushConnectorUtil().createEventObject(source_label);
          // set connector instance name as event class when it's provided
          event_GR.event_class = (typeof event_class !== 'undefined' && event_class) ? event_class : source_label;

          if (annotations) {

              if (annotations.description)
                  event_GR.description = annotations.description;
              else if (annotations.summary)
                  event_GR.description = annotations.summary;
              if (annotations.node)
                  event_GR.node = annotations.node.split(':')[0];
              if (annotations.resource)
                  event_GR.resource = annotations.resource;
              if (annotations.metric)
                  event_GR.metric_name = annotations.metric;
          }

          if (status) {

              if (status == "firing") {

                  var configurations = new sn_em_connector.PushConnectorConfigurations();
                  configurations.applyConfigurations(event_GR, sys_id, connector_sys_id);
                  event_GR.resolution_state = 'New';
                  this.setTimeOfEvent(start_time, event_GR);
              } else if (status == "resolved") {

                  event_GR.severity = "0";
                  event_GR.resolution_state = 'Closing';
                  this.setTimeOfEvent(end_time, event_GR);
              }
          }
          //if csutomer provides labels for particular fields we will override  them
          if (labels) {

              if (labels.type)
                  event_GR.type = labels.type;
              if (labels.device && global.JSUtil.nil(event_GR.resource))
                  event_GR.resource = labels.device;
              if (labels.instance && global.JSUtil.nil(event_GR.node))
                  event_GR.node = labels.instance.split(':')[0];
              if (labels.severity)
                  if (global.JSUtil.notNil(severity[labels.severity.toUpperCase()]))
                      event_GR.severity = severity[labels.severity.toUpperCase()];
          }

          event_GR.message_key = orgId + "_" + alerts[i].fingerprint;

  		// Get alerts additional info
          additional_info = new sn_em_connector.PushConnectorUtil().additionalInfo(alerts[i], request, false);
  		
  		// Get common additional info from payload
  		for (var key in payload) {
  			if (key !== 'alerts') {
  				additional_info[key] = payload[key];
  			}
  		}

          additional_info["startsAt"] = start_time;
          additional_info["endsAt"] = end_time;

          if (alerts[i].generatorURL)
              additional_info["generatorURL"] = alerts[i].generatorURL;
          if (alerts[i].silenceURL)
              additional_info["silenceURL"] = alerts[i].silenceURL;
          if (alerts[i].dashboardURL)
              additional_info["dashboardURL"] = alerts[i].dashboardURL;
          if (alerts[i].panelURL)
              additional_info["panelURL"] = alerts[i].panelURL;
          if (alerts[i].valueString)
              additional_info["valueString"] = alerts[i].valueString;
          

          // STRY55133117: update additional_info with connector tags and set event_class
          if (typeof connector_tags !== 'undefined' && connector_tags) {
              new PushConnectorInstanceUtils().updateAdditionalInfoWithConnectorTags(additional_info, connector_tags);
          }

          event_GR.additional_info = JSON.stringify(additional_info);

          // Populate custom domain info
          new sn_em_connector.PushConnectorUtil().populateDomain(sys_id, request, requestBody, event_GR);

          response = new sn_em_connector.PushConnectorUtil().buildResponseBody(responseBody, event_GR);

      }
      return response;

  },
  //format : 2022-12-08T15:48:00Z
  setTimeOfEvent: function(timestamp, event_GR) {

      timestamp = timestamp.replace("Z", "+0000");
      timestamp = timestamp.replace("T", " ");
      event_GR.time_of_event = new GlideDateTime(timestamp);
  },

  type: 'GrafanaPushConnectorScript'
};

Sys ID

c765de70472bd15082d8ea32736d4387

Offical Documentation

Official Docs: