var logger = new global.GSLog('org.kp.itss.incident.metric.utils.log', 'KP:I00110');
var duration = '';
var proposedOn;
var somc = null;
var metricGR = null;
var ciOutageGR = null;
var serviceOutageMetricsGR = null;
var newServiceOutageMetricsGR = null;
var metricDefSysId = gs.getProperty('org.kp.itss.incident.metric.major_inc_state_dur.sys_id');
logger.logDebug('executing');
try {
if (logger.debugOn()) {
logger.logDebug('current.sys_id = ' + current.sys_id);
logger.logDebug('current.number = ' + current.number);
}
somc = new global.KPServiceOutageMetricCalc();
metricGR = new GlideRecord('incident_metric');
metricGR.addQuery('mi_definition', metricDefSysId);
metricGR.addQuery('mi_value', 'Proposed');
metricGR.addQuery('inc_number', current.number);
metricGR.orderBy('mi_start');
metricGR.query();
if (metricGR.next()) {
proposedOn = metricGR.mi_start.dateNumericValue();
}
if (current.resolved_at != previous.resolved_at && (current.state == 6 || current.state == 7)) {
ciOutageGR = new GlideRecord('cmdb_ci_outage');
ciOutageGR.addQuery('task_number', current.sys_id);
ciOutageGR.addQuery('u_state', 'IN', [1, 2, 3, 4]);
ciOutageGR.addQuery('type', 'outage');
ciOutageGR.query();
if (ciOutageGR.hasNext() == false) {
serviceOutageMetricsGR = new GlideRecord('u_service_outage_metrics');
serviceOutageMetricsGR.addQuery('u_task', current.sys_id);
serviceOutageMetricsGR.query();
if (serviceOutageMetricsGR.next()) {
serviceOutageMetricsGR.u_total_outage_time = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
serviceOutageMetricsGR.u_business_disruption_outage_hours = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
serviceOutageMetricsGR.u_created_to_latest_outage_end = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
serviceOutageMetricsGR.update();
} else {
newServiceOutageMetricsGR = new GlideRecord('u_service_outage_metrics');
newServiceOutageMetricsGR.u_task = current.sys_id;
newServiceOutageMetricsGR.u_total_outage_time = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
newServiceOutageMetricsGR.u_business_disruption_outage_hours = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
newServiceOutageMetricsGR.u_created_to_latest_outage_end = gs.dateDiff(current.sys_created_on.getDisplayValue(), current.resolved_at.getDisplayValue(), false);
newServiceOutageMetricsGR.insert();
}
} else {
somc.recalcMetricOutage(current.sys_id, duration, current.sys_created_on.dateNumericValue(), proposedOn, current.resolved_at.dateNumericValue(), current.state);
}
}
if (current.resolved_at == '' && current.state < 6) {
somc.recalcMetricOutage(current.sys_id, duration, current.sys_created_on.dateNumericValue(), proposedOn);
}
} catch (err) {
logger.logErr('exception encountered, err=' + err);
}
})(current, previous);