grafana/public/app/features/annotations/events_processing.ts
Patrick O'Carroll 7837ee4466 Updated rules for variable name (#13106)
* updated rules for variable name and fixed files that didn't follow new rules

* fixed test so it uses new rule

* made exceptions to rule in interval_variable
2018-09-03 11:00:46 +02:00

81 lines
2.2 KiB
TypeScript

import _ from 'lodash';
/**
* This function converts annotation events into set
* of single events and regions (event consist of two)
* @param annotations
* @param options
*/
export function makeRegions(annotations, options) {
const [regionEvents, singleEvents] = _.partition(annotations, 'regionId');
const regions = getRegions(regionEvents, options.range);
annotations = _.concat(regions, singleEvents);
return annotations;
}
function getRegions(events, range) {
const regionEvents = _.filter(events, event => {
return event.regionId;
});
let regions = _.groupBy(regionEvents, 'regionId');
regions = _.compact(
_.map(regions, regionEvents => {
const regionObj = _.head(regionEvents);
if (regionEvents && regionEvents.length > 1) {
regionObj.timeEnd = regionEvents[1].time;
regionObj.isRegion = true;
return regionObj;
} else {
if (regionEvents && regionEvents.length) {
// Don't change proper region object
if (!regionObj.time || !regionObj.timeEnd) {
// This is cut region
if (isStartOfRegion(regionObj)) {
regionObj.timeEnd = range.to.valueOf() - 1;
} else {
// Start time = null
regionObj.timeEnd = regionObj.time;
regionObj.time = range.from.valueOf() + 1;
}
regionObj.isRegion = true;
}
return regionObj;
}
}
})
);
return regions;
}
function isStartOfRegion(event): boolean {
return event.id && event.id === event.regionId;
}
export function dedupAnnotations(annotations) {
let dedup = [];
// Split events by annotationId property existence
const events = _.partition(annotations, 'id');
const eventsById = _.groupBy(events[0], 'id');
dedup = _.map(eventsById, eventGroup => {
if (eventGroup.length > 1 && !_.every(eventGroup, isPanelAlert)) {
// Get first non-panel alert
return _.find(eventGroup, event => {
return event.eventType !== 'panel-alert';
});
} else {
return _.head(eventGroup);
}
});
dedup = _.concat(dedup, events[1]);
return dedup;
}
function isPanelAlert(event) {
return event.eventType === 'panel-alert';
}