29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { TimeRange, DataFrame, FieldType } from '@grafana/data';
|
|
import { TimeRegionConfig, calculateTimesWithin } from 'app/core/utils/timeRegions';
|
|
|
|
export function doTimeRegionQuery(name: string, config: TimeRegionConfig, range: TimeRange): DataFrame | undefined {
|
|
const { mode, duration, cronExpr, from, fromDayOfWeek } = config;
|
|
|
|
const isValidSimple = mode == null && (fromDayOfWeek != null || from != null);
|
|
const isValidAdvanced = mode === 'cron' && cronExpr != null && duration != null;
|
|
|
|
if (isValidSimple || isValidAdvanced) {
|
|
const ranges = calculateTimesWithin(config, range);
|
|
|
|
if (ranges.length > 0) {
|
|
const frame: DataFrame = {
|
|
fields: [
|
|
{ name: 'time', type: FieldType.time, values: ranges.map((r) => r.from), config: {} },
|
|
{ name: 'timeEnd', type: FieldType.time, values: ranges.map((r) => r.to), config: {} },
|
|
{ name: 'text', type: FieldType.string, values: Array(ranges.length).fill(name), config: {} },
|
|
],
|
|
length: ranges.length,
|
|
};
|
|
|
|
return frame;
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|