| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { format } from 'date-fns';
- import { HttpCheckStatus, ServiceCheckData } from '../../../../common/lib/http-check-data.module';
- /**
- * // Enhance data for displaying as stacked progress bar
- * @param start Start time (left boundary) for status timeline
- * @param end End time (right boundary) for status timeline
- * @param rawData The raw data array from the api response
- * @returns Data for displaying as stacked progress bar using ServiceTimelineWidget[data]
- */
- export function convertToStatusTimelineData(start: Date, end: Date, rawData?: ServiceCheckData[]) {
- const diffMs = end.getTime() - start.getTime();
- const data: Partial<StatusTimelineData>[] = [];
- if (rawData?.length) {
- let lastEntry: Partial<StatusTimelineData> | undefined = undefined;
- const diffPerc = ((rawData[0].time.getTime() - start.getTime()) / diffMs) * 100;
- if (diffPerc > 0) {
- lastEntry = {
- statusText: `[${format(rawData[0].time, 'HH:mm:ss')}] ${rawData[0].data.map(dx => dx.message).join(', ')}`,
- statusClass: mapStatusClass(rawData[0])
- };
- data.push(lastEntry);
- }
- let sumwidth = 0;
- rawData.forEach((d, i) => {
- if (lastEntry) {
- lastEntry.width = ((d.time.getTime() - start.getTime()) / diffMs) * 100 - sumwidth;
- sumwidth += lastEntry.width;
- }
- lastEntry = {
- statusText: `[${format(d.time, 'HH:mm:ss')}] ${d.data.map(dx => dx.message).join(', ')}`,
- statusClass: mapStatusClass(d)
- };
- data.push(lastEntry);
- });
- if (sumwidth < 100 && lastEntry && !lastEntry.width) {
- lastEntry.width = 100 - sumwidth;
- }
- } else {
- data.push({
- width: 100,
- statusClass: 'bg-progress',
- statusText: '- no data -'
- });
- }
- return data as StatusTimelineData[];
- }
- export function mapStatusClass(data: ServiceCheckData) {
- const maxStatus = data.data.reduce((res, d) => (res = Math.max(res, d.status)), 0);
- switch (maxStatus) {
- case HttpCheckStatus.OK:
- return 'bg-peak';
- default:
- return 'bg-max';
- }
- }
|