12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import partition from 'lodash/partition';
- import type {TimeseriesData} from '../common/types';
- export function splitSeriesIntoCompleteAndIncomplete(
- serie: TimeseriesData,
- delay: number
- ): (TimeseriesData | undefined)[] {
- const penultimateDatum = serie.data.at(-2);
- const finalDatum = serie.data.at(-1);
- let bucketSize: number = 0;
- if (penultimateDatum && finalDatum) {
- bucketSize =
- new Date(finalDatum.timestamp).getTime() -
- new Date(penultimateDatum.timestamp).getTime();
- }
- const ingestionDelayTimestamp = Date.now() - delay * 1000;
- const [completeData, incompleteData] = partition(serie.data, datum => {
- const bucketEndTimestamp = new Date(datum.timestamp).getTime() + bucketSize;
- return bucketEndTimestamp < ingestionDelayTimestamp;
- });
- // If there is both complete and incomplete data, prepend the incomplete data
- // with the final point from the complete data. This way, when the series are
- // plotted, there's a connecting line between them
- const finalCompletePoint = completeData.at(-1);
- if (incompleteData.length > 0 && finalCompletePoint) {
- incompleteData.unshift({...finalCompletePoint});
- }
- return [
- completeData.length > 0
- ? {
- ...serie,
- data: completeData,
- }
- : undefined,
- incompleteData.length > 0
- ? {
- ...serie,
- data: incompleteData,
- }
- : undefined,
- ];
- }
|