grafana/public/app/plugins/datasource/loki/logsTimeSplitting.ts
Matias Chomicki 663ed7ba82
Loki Query Splitting: Rename from "chunk" to "splitting" (#65630)
* Update chunking mentions in the code and ui

* Rename files and exported functions

* Rename configuration attribute

* Rename grouped querying function name

* Update more function names

* Update unit test

* Update unit tests

* More renames

* Rename time splitting functions
2023-04-03 12:30:08 +00:00

44 lines
1.6 KiB
TypeScript

// every timestamp in this file is a number which contains an unix-timestamp-in-millisecond format,
// like returned by `new Date().getTime()`. this is needed because the "math"
// has to be done on integer numbers.
// the way loki handles logs-range-queries is that if you specify start & end,
// one of those will be included, but the other will not. this allows us to
// make it easy to split ranges.
// for example, if the time-range is 100<>150,
// we can split it into:
// - 100<>120
// - 120<>140
// - 140<>150
// and no log-line will be skipped or duplicated
// (NOTE: we do these calculations in milliseconds. at the end, Loki receives
// nanoseconds, but it will be OK, because it's simply a matter to adding `000000`,
// to the end, so if we do it right in milliseconds, it should be OK in
// nanoseconds too
export function splitTimeRange(
startTime: number,
endTime: number,
idealRangeDuration: number
): Array<[number, number]> {
if (endTime - startTime <= idealRangeDuration) {
return [[startTime, endTime]];
}
const result: Array<[number, number]> = [];
// we walk backward, because we need want the potentially smaller "last" chunk
// to be at the oldest timestamp.
for (let chunkEndTime = endTime; chunkEndTime > startTime; chunkEndTime -= idealRangeDuration) {
// when we get close to the start of the time range, we need to be sure not
// to cross over the startTime
const chunkStartTime = Math.max(chunkEndTime - idealRangeDuration, startTime);
result.push([chunkStartTime, chunkEndTime]);
}
// because we walked backwards, we need to reverse the array
result.reverse();
return result;
}