Name

sn_app_insights.MetricUtil

Description

No description available

Script

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

  getMetric: function (metricName, fieldName, metricSubjects, metricObj, minutesAgoStart, isDuration, isAverage) {
  	var metricAggregateUtil = new MetricAggregateUtil();
  	// 7 days default time period
  	var end = new GlideDateTime();
  	var start = new GlideDateTime(end);
  	start.addSeconds(-1 * minutesAgoStart * 60);

  	var data;
  	if (isAverage)
  		data = metricAggregateUtil.transformToAvgDataArray(metricSubjects, metricName, start, end);
  	else
  		data = metricAggregateUtil.transformToMinDataArray(metricSubjects, metricName, start, end);
  	
  	for (var i = 0; i < data.length; i++) {
  		var id = data[i].getSubject();
  		var grSubject = metricAggregateUtil.getGrSubject(metricObj, id, data[i].getTableName());

  		if (!grSubject)
  			continue;

  		var val = 0;
  		var validArray;
  		
  		validArray = metricAggregateUtil.reduceArray(data[i], isAverage);

  		//Account for when no valid metrics are retrieved
  		if (validArray.length !== 0 && !isAverage) {

  			if (isDuration)
  				val = this.convertGlideDuration(grSubject.getValue(fieldName)) - validArray[0];
  			else if (isAverage)
  				val = validArray[0];
  			else
  				val = grSubject.getValue(fieldName) - validArray[0];

  			//If delta is negative, we know that there was a zboot or purge and the first value in the series is 0
  			if (val < 0)
  				//Get the field value and convert to a number
  				val = Number(this.convertGlideDuration(grSubject.getValue(fieldName)));
  		}
  		
  		metricObj[id][metricName] = val;
  	}
  },

  convertGlideDuration: function (duration) {
  	return new GlideDateTime(duration).getNumericValue();
  },
  type: 'MetricUtil'
};

Sys ID

2e2e038a531870102e10ddeeff7b1237

Offical Documentation

Official Docs: