@oneuptime/common 7.0.2989 → 7.0.2994
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Server/Infrastructure/Queue.ts +36 -1
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +4 -17
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +1005 -0
- package/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.ts +3 -0
- package/UI/Components/Charts/ChartLibrary/Utils/ChartColors.ts +117 -0
- package/UI/Components/Charts/ChartLibrary/Utils/Cx.ts +8 -0
- package/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.ts +15 -0
- package/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.ts +19 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.ts +17 -0
- package/UI/Components/Charts/Line/LineChart.tsx +58 -225
- package/UI/Components/Charts/Types/ChartCurve.ts +7 -0
- package/UI/Components/Charts/Types/DataPoint.ts +7 -0
- package/UI/Components/Charts/Types/SeriesPoint.ts +7 -0
- package/UI/Components/Charts/Types/SeriesPoints.ts +6 -0
- package/UI/Components/Charts/Types/XAxis/XAxis.ts +21 -0
- package/UI/Components/Charts/Types/XAxis/XAxisMaxMin.ts +3 -0
- package/UI/Components/Charts/Types/XAxis/XAxisPrecision.ts +26 -0
- package/UI/Components/Charts/Types/XAxis/XAxisType.ts +6 -0
- package/UI/Components/Charts/Types/XValue.ts +3 -0
- package/UI/Components/Charts/Types/YAxis/YAxis.ts +22 -0
- package/UI/Components/Charts/Types/YAxis/YAxisMaxMin.ts +3 -0
- package/UI/Components/Charts/Types/YAxis/YAxisType.ts +5 -0
- package/UI/Components/Charts/Types/YValue.ts +3 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +188 -0
- package/UI/Components/Charts/Utils/XAxis.ts +267 -0
- package/build/dist/Server/Infrastructure/Queue.js +20 -1
- package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +4 -9
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +388 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js +2 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/ChartColors.js +88 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/ChartColors.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/Cx.js +7 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/Cx.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.js +7 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +30 -136
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartCurve.js +8 -0
- package/build/dist/UI/Components/Charts/Types/ChartCurve.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/DataPoint.js +2 -0
- package/build/dist/UI/Components/Charts/Types/DataPoint.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/SeriesPoint.js +2 -0
- package/build/dist/UI/Components/Charts/Types/SeriesPoint.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/SeriesPoints.js +2 -0
- package/build/dist/UI/Components/Charts/Types/SeriesPoints.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js +8 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisMaxMin.js +2 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisMaxMin.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js +27 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisType.js +7 -0
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxisType.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/XValue.js +2 -0
- package/build/dist/UI/Components/Charts/Types/XValue.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxis.js +8 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxis.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxisMaxMin.js +2 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxisMaxMin.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxisType.js +6 -0
- package/build/dist/UI/Components/Charts/Types/YAxis/YAxisType.js.map +1 -0
- package/build/dist/UI/Components/Charts/Types/YValue.js +2 -0
- package/build/dist/UI/Components/Charts/Types/YValue.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +109 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +241 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -0
- package/package.json +6 -4
- package/UI/Components/Charts/Bar/Bar.tsx +0 -0
- package/UI/Components/Charts/Base/BaseChart.tsx +0 -0
- package/UI/Components/Charts/Tooltip/Tooltip.tsx +0 -84
- package/build/dist/UI/Components/Charts/Bar/Bar.js +0 -2
- package/build/dist/UI/Components/Charts/Bar/Bar.js.map +0 -1
- package/build/dist/UI/Components/Charts/Base/BaseChart.js +0 -2
- package/build/dist/UI/Components/Charts/Base/BaseChart.js.map +0 -1
- package/build/dist/UI/Components/Charts/Tooltip/Tooltip.js +0 -34
- package/build/dist/UI/Components/Charts/Tooltip/Tooltip.js.map +0 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/// ChartDataPoint is in the format of:
|
|
2
|
+
// {
|
|
3
|
+
// date: "Feb 22",
|
|
4
|
+
// SolarPanels: 2756,
|
|
5
|
+
// Inverters: 2103,
|
|
6
|
+
// }
|
|
7
|
+
|
|
8
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
9
|
+
import ChartDataPoint from "../ChartLibrary/Types/ChartDataPoint";
|
|
10
|
+
import SeriesPoints from "../Types/SeriesPoints";
|
|
11
|
+
import { XAxis, XAxisAggregateType } from "../Types/XAxis/XAxis";
|
|
12
|
+
import XAxisMaxMin from "../Types/XAxis/XAxisMaxMin";
|
|
13
|
+
import YAxis, { YAxisPrecision } from "../Types/YAxis/YAxis";
|
|
14
|
+
import XAxisUtil from "./XAxis";
|
|
15
|
+
|
|
16
|
+
interface SeriesData {
|
|
17
|
+
sum: number;
|
|
18
|
+
count: number;
|
|
19
|
+
max: number;
|
|
20
|
+
min: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default class DataPointUtil {
|
|
24
|
+
public static getChartDataPoints(data: {
|
|
25
|
+
seriesPoints: Array<SeriesPoints>;
|
|
26
|
+
xAxis: XAxis;
|
|
27
|
+
yAxis: YAxis;
|
|
28
|
+
}): Array<ChartDataPoint> {
|
|
29
|
+
const { xAxisLegend, intervals, formatter } = this.initializeXAxisData(
|
|
30
|
+
data.xAxis,
|
|
31
|
+
);
|
|
32
|
+
const arrayOfData: ChartDataPoint[] = this.initializeArrayOfData(
|
|
33
|
+
intervals,
|
|
34
|
+
xAxisLegend,
|
|
35
|
+
formatter,
|
|
36
|
+
);
|
|
37
|
+
const seriesDataMap: {
|
|
38
|
+
[key: string]: SeriesData;
|
|
39
|
+
} = this.processSeriesData(
|
|
40
|
+
data.seriesPoints,
|
|
41
|
+
arrayOfData,
|
|
42
|
+
xAxisLegend,
|
|
43
|
+
formatter,
|
|
44
|
+
data.xAxis.options.aggregateType,
|
|
45
|
+
);
|
|
46
|
+
this.formatSeriesData(
|
|
47
|
+
arrayOfData,
|
|
48
|
+
seriesDataMap,
|
|
49
|
+
data.yAxis.options.precision,
|
|
50
|
+
);
|
|
51
|
+
return arrayOfData;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private static initializeXAxisData(xAxis: XAxis): {
|
|
55
|
+
xAxisMax: XAxisMaxMin;
|
|
56
|
+
xAxisMin: XAxisMaxMin;
|
|
57
|
+
xAxisLegend: string;
|
|
58
|
+
intervals: Array<Date>;
|
|
59
|
+
formatter: (value: Date) => string;
|
|
60
|
+
} {
|
|
61
|
+
const xAxisMax: XAxisMaxMin = xAxis.options.max;
|
|
62
|
+
const xAxisMin: XAxisMaxMin = xAxis.options.min;
|
|
63
|
+
const xAxisLegend: string = xAxis.legend;
|
|
64
|
+
const intervals: Array<Date> = XAxisUtil.getPrecisionIntervals({
|
|
65
|
+
xAxisMax,
|
|
66
|
+
xAxisMin,
|
|
67
|
+
});
|
|
68
|
+
const formatter: (value: Date) => string = XAxisUtil.getFormatter({
|
|
69
|
+
xAxisMax,
|
|
70
|
+
xAxisMin,
|
|
71
|
+
});
|
|
72
|
+
return { xAxisMax, xAxisMin, xAxisLegend, intervals, formatter };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private static initializeArrayOfData(
|
|
76
|
+
intervals: Array<Date>,
|
|
77
|
+
xAxisLegend: string,
|
|
78
|
+
formatter: (value: Date) => string,
|
|
79
|
+
): Array<ChartDataPoint> {
|
|
80
|
+
const arrayOfData: Array<ChartDataPoint> = [];
|
|
81
|
+
for (const interval of intervals) {
|
|
82
|
+
const dataPoint: ChartDataPoint = {};
|
|
83
|
+
dataPoint[xAxisLegend] = formatter(interval);
|
|
84
|
+
arrayOfData.push(dataPoint);
|
|
85
|
+
}
|
|
86
|
+
return arrayOfData;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private static processSeriesData(
|
|
90
|
+
seriesPoints: Array<SeriesPoints>,
|
|
91
|
+
arrayOfData: Array<ChartDataPoint>,
|
|
92
|
+
xAxisLegend: string,
|
|
93
|
+
formatter: (value: Date) => string,
|
|
94
|
+
aggregateType: XAxisAggregateType,
|
|
95
|
+
): { [key: string]: SeriesData } {
|
|
96
|
+
const seriesDataMap: { [key: string]: SeriesData } = {};
|
|
97
|
+
for (const series of seriesPoints) {
|
|
98
|
+
for (const dataPoint of series.data) {
|
|
99
|
+
const date: Date = dataPoint.x;
|
|
100
|
+
const value: number = dataPoint.y;
|
|
101
|
+
const formattedDate: string = formatter(date);
|
|
102
|
+
for (const chartDataPoint of arrayOfData) {
|
|
103
|
+
if (chartDataPoint[xAxisLegend] === formattedDate) {
|
|
104
|
+
if (!seriesDataMap[series.seriesName]) {
|
|
105
|
+
seriesDataMap[series.seriesName] = {
|
|
106
|
+
sum: 0,
|
|
107
|
+
count: 0,
|
|
108
|
+
max: Number.NEGATIVE_INFINITY,
|
|
109
|
+
min: Number.POSITIVE_INFINITY,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
seriesDataMap[series.seriesName]!.sum += value;
|
|
113
|
+
seriesDataMap[series.seriesName]!.count += 1;
|
|
114
|
+
seriesDataMap[series.seriesName]!.max = Math.max(
|
|
115
|
+
seriesDataMap[series.seriesName]!.max,
|
|
116
|
+
value,
|
|
117
|
+
);
|
|
118
|
+
seriesDataMap[series.seriesName]!.min = Math.min(
|
|
119
|
+
seriesDataMap[series.seriesName]!.min,
|
|
120
|
+
value,
|
|
121
|
+
);
|
|
122
|
+
chartDataPoint[series.seriesName] = this.calculateAggregate(
|
|
123
|
+
seriesDataMap[series.seriesName]!,
|
|
124
|
+
aggregateType,
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return seriesDataMap;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private static calculateAggregate(
|
|
134
|
+
seriesData: SeriesData,
|
|
135
|
+
aggregateType: XAxisAggregateType,
|
|
136
|
+
): number {
|
|
137
|
+
switch (aggregateType) {
|
|
138
|
+
case XAxisAggregateType.Average:
|
|
139
|
+
return seriesData.sum / seriesData.count;
|
|
140
|
+
case XAxisAggregateType.Sum:
|
|
141
|
+
return seriesData.sum;
|
|
142
|
+
case XAxisAggregateType.Max:
|
|
143
|
+
return seriesData.max;
|
|
144
|
+
case XAxisAggregateType.Min:
|
|
145
|
+
return seriesData.min;
|
|
146
|
+
default:
|
|
147
|
+
throw new BadDataException("Aggregate type not supported.");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private static formatSeriesData(
|
|
152
|
+
arrayOfData: Array<ChartDataPoint>,
|
|
153
|
+
seriesDataMap: { [key: string]: SeriesData },
|
|
154
|
+
yAxisPrecision: YAxisPrecision,
|
|
155
|
+
): void {
|
|
156
|
+
for (const chartDataPoint of arrayOfData) {
|
|
157
|
+
for (const seriesName in seriesDataMap) {
|
|
158
|
+
if (
|
|
159
|
+
chartDataPoint[seriesName] &&
|
|
160
|
+
typeof chartDataPoint[seriesName] === "number"
|
|
161
|
+
) {
|
|
162
|
+
chartDataPoint[seriesName] = this.formatValue(
|
|
163
|
+
chartDataPoint[seriesName] as number,
|
|
164
|
+
yAxisPrecision,
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private static formatValue(
|
|
172
|
+
value: number,
|
|
173
|
+
yAxisPrecision: YAxisPrecision,
|
|
174
|
+
): number {
|
|
175
|
+
switch (yAxisPrecision) {
|
|
176
|
+
case YAxisPrecision.NoDecimals:
|
|
177
|
+
return parseFloat(value.toFixed(0));
|
|
178
|
+
case YAxisPrecision.OneDecimal:
|
|
179
|
+
return parseFloat(value.toFixed(1));
|
|
180
|
+
case YAxisPrecision.TwoDecimals:
|
|
181
|
+
return parseFloat(value.toFixed(2));
|
|
182
|
+
case YAxisPrecision.ThreeDecimals:
|
|
183
|
+
return parseFloat(value.toFixed(3));
|
|
184
|
+
default:
|
|
185
|
+
throw new BadDataException("YAxis precision not supported.");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import NotImplementedException from "../../../../Types/Exception/NotImplementedException";
|
|
2
|
+
import XAxisMaxMin from "../Types/XAxis/XAxisMaxMin";
|
|
3
|
+
import XAxisPrecision from "../Types/XAxis/XAxisPrecision";
|
|
4
|
+
|
|
5
|
+
export default class XAxisUtil {
|
|
6
|
+
public static getPrecision(data: {
|
|
7
|
+
xAxisMin: XAxisMaxMin;
|
|
8
|
+
xAxisMax: XAxisMaxMin;
|
|
9
|
+
}): XAxisPrecision {
|
|
10
|
+
if (
|
|
11
|
+
typeof data.xAxisMax === "number" ||
|
|
12
|
+
typeof data.xAxisMin === "number"
|
|
13
|
+
) {
|
|
14
|
+
// number not yet supported.
|
|
15
|
+
throw new NotImplementedException();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const startDate: Date = data.xAxisMin as Date;
|
|
19
|
+
const endDate: Date = data.xAxisMax as Date;
|
|
20
|
+
|
|
21
|
+
const totalMilliseconds: number = endDate.getTime() - startDate.getTime();
|
|
22
|
+
const totalSeconds: number = totalMilliseconds / 1000;
|
|
23
|
+
const totalMinutes: number = totalSeconds / 60;
|
|
24
|
+
const totalHours: number = totalMinutes / 60;
|
|
25
|
+
const totalDays: number = totalHours / 24;
|
|
26
|
+
const totalWeeks: number = totalDays / 7;
|
|
27
|
+
const totalMonths: number = totalDays / 30;
|
|
28
|
+
|
|
29
|
+
if (totalSeconds <= 100) {
|
|
30
|
+
return XAxisPrecision.EVERY_SECOND;
|
|
31
|
+
}
|
|
32
|
+
if (totalSeconds <= 500) {
|
|
33
|
+
return XAxisPrecision.EVERY_FIVE_SECONDS;
|
|
34
|
+
}
|
|
35
|
+
if (totalSeconds <= 1000) {
|
|
36
|
+
return XAxisPrecision.EVERY_TEN_SECONDS;
|
|
37
|
+
}
|
|
38
|
+
if (totalSeconds <= 3000) {
|
|
39
|
+
return XAxisPrecision.EVERY_THIRTY_SECONDS;
|
|
40
|
+
}
|
|
41
|
+
if (totalMinutes <= 100) {
|
|
42
|
+
return XAxisPrecision.EVERY_MINUTE;
|
|
43
|
+
}
|
|
44
|
+
if (totalMinutes <= 500) {
|
|
45
|
+
return XAxisPrecision.EVERY_FIVE_MINUTES;
|
|
46
|
+
}
|
|
47
|
+
if (totalMinutes <= 1000) {
|
|
48
|
+
return XAxisPrecision.EVERY_TEN_MINUTES;
|
|
49
|
+
}
|
|
50
|
+
if (totalMinutes <= 3000) {
|
|
51
|
+
return XAxisPrecision.EVERY_THIRTY_MINUTES;
|
|
52
|
+
}
|
|
53
|
+
if (totalHours <= 100) {
|
|
54
|
+
return XAxisPrecision.EVERY_HOUR;
|
|
55
|
+
}
|
|
56
|
+
if (totalHours <= 200) {
|
|
57
|
+
return XAxisPrecision.EVERY_TWO_HOURS;
|
|
58
|
+
}
|
|
59
|
+
if (totalHours <= 300) {
|
|
60
|
+
return XAxisPrecision.EVERY_THREE_HOURS;
|
|
61
|
+
}
|
|
62
|
+
if (totalHours <= 600) {
|
|
63
|
+
return XAxisPrecision.EVERY_SIX_HOURS;
|
|
64
|
+
}
|
|
65
|
+
if (totalHours <= 1200) {
|
|
66
|
+
return XAxisPrecision.EVERY_TWELVE_HOURS;
|
|
67
|
+
}
|
|
68
|
+
if (totalDays <= 100) {
|
|
69
|
+
return XAxisPrecision.EVERY_DAY;
|
|
70
|
+
}
|
|
71
|
+
if (totalDays <= 200) {
|
|
72
|
+
return XAxisPrecision.EVERY_TWO_DAYS;
|
|
73
|
+
}
|
|
74
|
+
if (totalWeeks <= 100) {
|
|
75
|
+
return XAxisPrecision.EVERY_WEEK;
|
|
76
|
+
}
|
|
77
|
+
if (totalWeeks <= 200) {
|
|
78
|
+
return XAxisPrecision.EVERY_TWO_WEEKS;
|
|
79
|
+
}
|
|
80
|
+
if (totalMonths <= 100) {
|
|
81
|
+
return XAxisPrecision.EVERY_MONTH;
|
|
82
|
+
}
|
|
83
|
+
if (totalMonths <= 200) {
|
|
84
|
+
return XAxisPrecision.EVERY_TWO_MONTHS;
|
|
85
|
+
}
|
|
86
|
+
if (totalMonths <= 300) {
|
|
87
|
+
return XAxisPrecision.EVERY_THREE_MONTHS;
|
|
88
|
+
}
|
|
89
|
+
if (totalMonths <= 600) {
|
|
90
|
+
return XAxisPrecision.EVERY_SIX_MONTHS;
|
|
91
|
+
}
|
|
92
|
+
return XAxisPrecision.EVERY_YEAR;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public static getPrecisionIntervals(data: {
|
|
96
|
+
xAxisMin: XAxisMaxMin;
|
|
97
|
+
xAxisMax: XAxisMaxMin;
|
|
98
|
+
}): Array<Date> {
|
|
99
|
+
const precision: XAxisPrecision = XAxisUtil.getPrecision(data);
|
|
100
|
+
|
|
101
|
+
if (
|
|
102
|
+
typeof data.xAxisMax === "number" ||
|
|
103
|
+
typeof data.xAxisMin === "number"
|
|
104
|
+
) {
|
|
105
|
+
// number not yet supported.
|
|
106
|
+
throw new NotImplementedException();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const startDate: Date = new Date(data.xAxisMin as Date);
|
|
110
|
+
const endDate: Date = new Date(data.xAxisMax as Date);
|
|
111
|
+
const intervals: Array<Date> = [];
|
|
112
|
+
|
|
113
|
+
const currentDate: Date = new Date(startDate);
|
|
114
|
+
|
|
115
|
+
while (currentDate <= endDate) {
|
|
116
|
+
intervals.push(new Date(currentDate));
|
|
117
|
+
|
|
118
|
+
switch (precision) {
|
|
119
|
+
case XAxisPrecision.EVERY_SECOND:
|
|
120
|
+
currentDate.setSeconds(currentDate.getSeconds() + 1);
|
|
121
|
+
break;
|
|
122
|
+
case XAxisPrecision.EVERY_FIVE_SECONDS:
|
|
123
|
+
currentDate.setSeconds(currentDate.getSeconds() + 5);
|
|
124
|
+
break;
|
|
125
|
+
case XAxisPrecision.EVERY_TEN_SECONDS:
|
|
126
|
+
currentDate.setSeconds(currentDate.getSeconds() + 10);
|
|
127
|
+
break;
|
|
128
|
+
case XAxisPrecision.EVERY_THIRTY_SECONDS:
|
|
129
|
+
currentDate.setSeconds(currentDate.getSeconds() + 30);
|
|
130
|
+
break;
|
|
131
|
+
case XAxisPrecision.EVERY_MINUTE:
|
|
132
|
+
currentDate.setMinutes(currentDate.getMinutes() + 1);
|
|
133
|
+
break;
|
|
134
|
+
case XAxisPrecision.EVERY_FIVE_MINUTES:
|
|
135
|
+
currentDate.setMinutes(currentDate.getMinutes() + 5);
|
|
136
|
+
break;
|
|
137
|
+
case XAxisPrecision.EVERY_TEN_MINUTES:
|
|
138
|
+
currentDate.setMinutes(currentDate.getMinutes() + 10);
|
|
139
|
+
break;
|
|
140
|
+
case XAxisPrecision.EVERY_THIRTY_MINUTES:
|
|
141
|
+
currentDate.setMinutes(currentDate.getMinutes() + 30);
|
|
142
|
+
break;
|
|
143
|
+
case XAxisPrecision.EVERY_HOUR:
|
|
144
|
+
currentDate.setHours(currentDate.getHours() + 1);
|
|
145
|
+
break;
|
|
146
|
+
case XAxisPrecision.EVERY_TWO_HOURS:
|
|
147
|
+
currentDate.setHours(currentDate.getHours() + 2);
|
|
148
|
+
break;
|
|
149
|
+
case XAxisPrecision.EVERY_THREE_HOURS:
|
|
150
|
+
currentDate.setHours(currentDate.getHours() + 3);
|
|
151
|
+
break;
|
|
152
|
+
case XAxisPrecision.EVERY_SIX_HOURS:
|
|
153
|
+
currentDate.setHours(currentDate.getHours() + 6);
|
|
154
|
+
break;
|
|
155
|
+
case XAxisPrecision.EVERY_TWELVE_HOURS:
|
|
156
|
+
currentDate.setHours(currentDate.getHours() + 12);
|
|
157
|
+
break;
|
|
158
|
+
case XAxisPrecision.EVERY_DAY:
|
|
159
|
+
currentDate.setDate(currentDate.getDate() + 1);
|
|
160
|
+
break;
|
|
161
|
+
case XAxisPrecision.EVERY_TWO_DAYS:
|
|
162
|
+
currentDate.setDate(currentDate.getDate() + 2);
|
|
163
|
+
break;
|
|
164
|
+
case XAxisPrecision.EVERY_WEEK:
|
|
165
|
+
currentDate.setDate(currentDate.getDate() + 7);
|
|
166
|
+
break;
|
|
167
|
+
case XAxisPrecision.EVERY_TWO_WEEKS:
|
|
168
|
+
currentDate.setDate(currentDate.getDate() + 14);
|
|
169
|
+
break;
|
|
170
|
+
case XAxisPrecision.EVERY_MONTH:
|
|
171
|
+
currentDate.setMonth(currentDate.getMonth() + 1);
|
|
172
|
+
break;
|
|
173
|
+
case XAxisPrecision.EVERY_TWO_MONTHS:
|
|
174
|
+
currentDate.setMonth(currentDate.getMonth() + 2);
|
|
175
|
+
break;
|
|
176
|
+
case XAxisPrecision.EVERY_THREE_MONTHS:
|
|
177
|
+
currentDate.setMonth(currentDate.getMonth() + 3);
|
|
178
|
+
break;
|
|
179
|
+
case XAxisPrecision.EVERY_SIX_MONTHS:
|
|
180
|
+
currentDate.setMonth(currentDate.getMonth() + 6);
|
|
181
|
+
break;
|
|
182
|
+
case XAxisPrecision.EVERY_YEAR:
|
|
183
|
+
currentDate.setFullYear(currentDate.getFullYear() + 1);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return intervals;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
public static getFormatter(data: {
|
|
192
|
+
xAxisMin: XAxisMaxMin;
|
|
193
|
+
xAxisMax: XAxisMaxMin;
|
|
194
|
+
}): (value: Date) => string {
|
|
195
|
+
const precision: XAxisPrecision = XAxisUtil.getPrecision(data);
|
|
196
|
+
|
|
197
|
+
switch (precision) {
|
|
198
|
+
case XAxisPrecision.EVERY_SECOND:
|
|
199
|
+
case XAxisPrecision.EVERY_FIVE_SECONDS:
|
|
200
|
+
case XAxisPrecision.EVERY_TEN_SECONDS:
|
|
201
|
+
case XAxisPrecision.EVERY_THIRTY_SECONDS:
|
|
202
|
+
return (value: Date) => {
|
|
203
|
+
return value.toISOString().substring(11, 19);
|
|
204
|
+
}; // HH:mm:ss
|
|
205
|
+
case XAxisPrecision.EVERY_MINUTE:
|
|
206
|
+
case XAxisPrecision.EVERY_FIVE_MINUTES:
|
|
207
|
+
case XAxisPrecision.EVERY_TEN_MINUTES:
|
|
208
|
+
case XAxisPrecision.EVERY_THIRTY_MINUTES:
|
|
209
|
+
return (value: Date) => {
|
|
210
|
+
return value.toISOString().substring(11, 16);
|
|
211
|
+
}; // HH:mm
|
|
212
|
+
case XAxisPrecision.EVERY_HOUR:
|
|
213
|
+
case XAxisPrecision.EVERY_TWO_HOURS:
|
|
214
|
+
case XAxisPrecision.EVERY_THREE_HOURS:
|
|
215
|
+
case XAxisPrecision.EVERY_SIX_HOURS:
|
|
216
|
+
case XAxisPrecision.EVERY_TWELVE_HOURS:
|
|
217
|
+
return (value: Date) => {
|
|
218
|
+
const dateString: string = value.toISOString();
|
|
219
|
+
const day: string = dateString.substring(8, 10);
|
|
220
|
+
const month: string = value.toLocaleString("default", {
|
|
221
|
+
month: "short",
|
|
222
|
+
});
|
|
223
|
+
const hour: string = dateString.substring(11, 13);
|
|
224
|
+
return `${day} ${month}, ${hour}:00`;
|
|
225
|
+
}; // DD MMM, HH:00
|
|
226
|
+
case XAxisPrecision.EVERY_DAY:
|
|
227
|
+
case XAxisPrecision.EVERY_TWO_DAYS:
|
|
228
|
+
return (value: Date) => {
|
|
229
|
+
const dateString: string = value.toISOString();
|
|
230
|
+
const day: string = dateString.substring(8, 10);
|
|
231
|
+
const month: string = value.toLocaleString("default", {
|
|
232
|
+
month: "short",
|
|
233
|
+
});
|
|
234
|
+
return `${day} ${month}`;
|
|
235
|
+
}; // DD MMM
|
|
236
|
+
case XAxisPrecision.EVERY_WEEK:
|
|
237
|
+
case XAxisPrecision.EVERY_TWO_WEEKS:
|
|
238
|
+
return (value: Date) => {
|
|
239
|
+
const dateString: string = value.toISOString();
|
|
240
|
+
const day: string = dateString.substring(8, 10);
|
|
241
|
+
const month: string = value.toLocaleString("default", {
|
|
242
|
+
month: "short",
|
|
243
|
+
});
|
|
244
|
+
return `${day} ${month}`;
|
|
245
|
+
}; // DD MMM
|
|
246
|
+
case XAxisPrecision.EVERY_MONTH:
|
|
247
|
+
case XAxisPrecision.EVERY_TWO_MONTHS:
|
|
248
|
+
case XAxisPrecision.EVERY_THREE_MONTHS:
|
|
249
|
+
case XAxisPrecision.EVERY_SIX_MONTHS:
|
|
250
|
+
return (value: Date) => {
|
|
251
|
+
const dateString: string = value.toISOString();
|
|
252
|
+
const day: string = dateString.substring(8, 10);
|
|
253
|
+
const year: string = dateString.substring(0, 4);
|
|
254
|
+
const month: string = value.toLocaleString("default", {
|
|
255
|
+
month: "short",
|
|
256
|
+
});
|
|
257
|
+
return `${day} ${month} ${year}`;
|
|
258
|
+
}; // DD MMM
|
|
259
|
+
case XAxisPrecision.EVERY_YEAR:
|
|
260
|
+
return (value: Date) => {
|
|
261
|
+
return value.toISOString().substring(0, 4);
|
|
262
|
+
}; // YYYY
|
|
263
|
+
default:
|
|
264
|
+
throw new Error("Unsupported precision");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { RedisHostname, RedisPassword, RedisPort } from "../EnvironmentConfig";
|
|
1
|
+
import { ClusterKey, RedisHostname, RedisPassword, RedisPort, } from "../EnvironmentConfig";
|
|
2
2
|
import { Queue as BullQueue } from "bullmq";
|
|
3
|
+
import { ExpressAdapter } from "@bull-board/express";
|
|
4
|
+
import { createBullBoard } from "@bull-board/api";
|
|
5
|
+
import { BullMQAdapter } from "@bull-board/api/bullMQAdapter";
|
|
3
6
|
export var QueueName;
|
|
4
7
|
(function (QueueName) {
|
|
5
8
|
QueueName["Workflow"] = "Workflow";
|
|
@@ -33,6 +36,22 @@ class Queue {
|
|
|
33
36
|
// remove existing repeatable job
|
|
34
37
|
await this.getQueue(queueName).removeRepeatableByKey(jobId);
|
|
35
38
|
}
|
|
39
|
+
static getInspectorRoute() {
|
|
40
|
+
return "/api/inspect/queue/:clusterKey";
|
|
41
|
+
}
|
|
42
|
+
static getQueueInspectorRouter() {
|
|
43
|
+
const serverAdapter = new ExpressAdapter();
|
|
44
|
+
createBullBoard({
|
|
45
|
+
queues: [
|
|
46
|
+
...Object.values(QueueName).map((queueName) => {
|
|
47
|
+
return new BullMQAdapter(this.getQueue(queueName));
|
|
48
|
+
}),
|
|
49
|
+
],
|
|
50
|
+
serverAdapter: serverAdapter,
|
|
51
|
+
});
|
|
52
|
+
serverAdapter.setBasePath(this.getInspectorRoute().replace("/:clusterKey", "/" + ClusterKey.toString()));
|
|
53
|
+
return serverAdapter.getRouter();
|
|
54
|
+
}
|
|
36
55
|
static async addJob(queueName, jobId, jobName, data, options) {
|
|
37
56
|
const optionsObject = {
|
|
38
57
|
jobId: jobId.toString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../../Server/Infrastructure/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../../../Server/Infrastructure/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAoB,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,kCAAqB,CAAA;IACrB,8BAAiB,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAID,MAAqB,KAAK;IAGjB,MAAM,CAAC,QAAQ,CAAC,SAAoB;QACzC,wCAAwC;QACxC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAc,CAAC;QAChD,CAAC;QAED,MAAM,KAAK,GAAc,IAAI,SAAS,CAAC,SAAS,EAAE;YAChD,UAAU,EAAE;gBACV,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,aAAa;aACxB;SACF,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAElC,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,SAAS,CAC3B,SAAoB,EACpB,KAAa;QAEb,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAoB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1E,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACrB,CAAC;QAED,iCAAiC;QACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,iBAAiB;QAC7B,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,uBAAuB;QACnC,MAAM,aAAa,GAAmB,IAAI,cAAc,EAAE,CAAC;QAE3D,eAAe,CAAC;YACd,MAAM,EAAE;gBACN,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,SAAoB,EAAE,EAAE;oBACvD,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrD,CAAC,CAAC;aACH;YACD,aAAa,EAAE,aAAa;SAC7B,CAAC,CAAC;QAEH,aAAa,CAAC,WAAW,CACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAC9B,cAAc,EACd,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,CAC5B,CACF,CAAC;QAEF,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,SAAoB,EACpB,KAAa,EACb,OAAe,EACf,IAAgB,EAChB,OAGC;QAED,MAAM,aAAa,GAAgB;YACjC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;SACxB,CAAC;QAEF,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAClC,aAAa,CAAC,MAAM,GAAG;gBACrB,OAAO,EAAE,OAAO,CAAC,UAAU;aAC5B,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAoB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1E,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,EAAE,CAAC;YAC3B,iCAAiC;YACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAClD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CACvB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CACtD,OAAO,EACP,IAAI,EACJ,aAAa,CACd,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;;AA1Gc,eAAS,GAA0B,EAAE,CAAC;eADlC,KAAK"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import Text from "../../../../Types/Text";
|
|
1
2
|
import LineChart from "../Line/LineChart";
|
|
2
|
-
import React
|
|
3
|
+
import React from "react";
|
|
3
4
|
export var ChartType;
|
|
4
5
|
(function (ChartType) {
|
|
5
6
|
ChartType["LINE"] = "line";
|
|
@@ -7,20 +8,14 @@ export var ChartType;
|
|
|
7
8
|
ChartType["AREA"] = "area";
|
|
8
9
|
})(ChartType || (ChartType = {}));
|
|
9
10
|
const ChartGroup = (props) => {
|
|
10
|
-
const
|
|
11
|
+
const syncId = Text.generateRandomText(10);
|
|
11
12
|
return (React.createElement("div", { className: "lg:grid grid-cols-1 gap-5" }, props.charts.map((chart, index) => {
|
|
12
13
|
switch (chart.type) {
|
|
13
14
|
case ChartType.LINE:
|
|
14
15
|
return (React.createElement("div", { key: index, className: "p-6 rounded-md bg-white shadow" },
|
|
15
16
|
React.createElement("h2", { "data-testid": "card-details-heading", id: "card-details-heading", className: "text-lg font-medium leading-6 text-gray-900" }, chart.title),
|
|
16
17
|
chart.description && (React.createElement("p", { "data-testid": "card-description", className: "mt-1 text-sm text-gray-500 w-full" }, chart.description)),
|
|
17
|
-
React.createElement(LineChart, Object.assign({ key: index }, chart.props, {
|
|
18
|
-
value: chart.sync ? syncValue : undefined,
|
|
19
|
-
}, onHoverXAxis: (value) => {
|
|
20
|
-
if (chart.sync) {
|
|
21
|
-
setSyncValue(value);
|
|
22
|
-
}
|
|
23
|
-
} }))));
|
|
18
|
+
React.createElement(LineChart, Object.assign({ key: index }, chart.props, { syncId: syncId }))));
|
|
24
19
|
default:
|
|
25
20
|
return React.createElement(React.Fragment, null);
|
|
26
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartGroup.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/ChartGroup/ChartGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,SAA+C,MAAM,mBAAmB,CAAC;AAChF,OAAO,
|
|
1
|
+
{"version":3,"file":"ChartGroup.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/ChartGroup/ChartGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,SAA+C,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;IACX,0BAAa,CAAA;AACf,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAcD,MAAM,UAAU,GAAsC,CACpD,KAAqB,EACP,EAAE;IAChB,MAAM,MAAM,GAAW,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO,CACL,6BAAK,SAAS,EAAC,2BAA2B,IACvC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE;QAChD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,CACL,6BAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,gCAAgC;oBACzD,2CACc,sBAAsB,EAClC,EAAE,EAAC,sBAAsB,EACzB,SAAS,EAAC,6CAA6C,IAEtD,KAAK,CAAC,KAAK,CACT;oBACJ,KAAK,CAAC,WAAW,IAAI,CACpB,0CACc,kBAAkB,EAC9B,SAAS,EAAC,mCAAmC,IAE5C,KAAK,CAAC,WAAW,CAChB,CACL;oBACD,oBAAC,SAAS,kBAAC,GAAG,EAAE,KAAK,IAAM,KAAK,CAAC,KAAK,IAAE,MAAM,EAAE,MAAM,IAAI,CACtD,CACP,CAAC;YACJ;gBACE,OAAO,yCAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|