in src/Sfx/App/Scripts/Models/eventstore/timelineGenerators.ts [542:622]
export function parseEventsGenerically(events: FabricEvent[], textSearch: string = ""): ITimelineData {
let items = new vis.DataSet<vis.DataItem>();
let groupIds: any[] = [];
events.forEach( (event, index) => {
const groupId = parseAndAddGroupIdByString(event, groupIds, textSearch);
let color = "white";
if ("Status" in event.eventProperties) {
try {
const status = event.eventProperties["Status"];
if (status === "Ok") {
color = "green";
} else if (status === "Warning") {
color = "orange";
} else if (status === "Error") {
color = "red";
}
}catch (e) {}
}else {
if (HtmlUtils.eventTypesUtil.isResolved(event)) {
color = "green";
} else if (HtmlUtils.eventTypesUtil.isWarning(event)) {
color = "orange";
} else if (HtmlUtils.eventTypesUtil.isError(event)) {
color = "red";
}
}
let item = {
content: "",
id: index,
start: event.timeStamp,
group: groupId,
type: "point",
title: EventStoreUtils.tooltipFormat(event.raw, event.timeStamp),
className: `${color}-point`,
subgroup: "noStack"
};
// optional event properties for higher degree of configuration
if ("Duration" in event.eventProperties) {
//only display a description for range based events
if ("Description" in event.eventProperties) {
try {
item.content = event.eventProperties["Description"];
}catch (e) {}
};
try {
const duration = event.eventProperties["Duration"];
const end = event.timeStamp;
const endDate = new Date(end);
const start = new Date(endDate.getTime() - duration).toISOString();
if (duration < 0) {
item.start = end;
item["end"] = start;
item.title = EventStoreUtils.tooltipFormat(event.raw, start, end, item.content);
}else {
item.start = start;
item["end"] = end;
item.title = EventStoreUtils.tooltipFormat(event.raw, end, start, item.content);
}
item.type = "range";
item.className = color;
item.subgroup = "stack";
}catch (e ) {}
}
items.add(item);
});
let groups = new vis.DataSet<vis.DataGroup>(groupIds);
EventStoreUtils.addSubGroups(groups);
return {
groups,
items
};
}