mirror of
https://github.com/grafana/grafana.git
synced 2025-09-23 18:52:33 +08:00
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import moment from 'moment';
|
|
import React from 'react';
|
|
|
|
import { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types';
|
|
|
|
import {
|
|
getDaysOfMonthString,
|
|
getMonthsString,
|
|
getTimeString,
|
|
getWeekdayString,
|
|
getYearsString,
|
|
} from '../../utils/alertmanager';
|
|
|
|
// https://github.com/prometheus/alertmanager/blob/9de8ef36755298a68b6ab20244d4369d38bdea99/timeinterval/timeinterval.go#L443
|
|
const TIME_RANGE_REGEX = /^((([01][0-9])|(2[0-3])):[0-5][0-9])$|(^24:00$)/;
|
|
|
|
const isvalidTimeFormat = (timeString: string): boolean => {
|
|
return timeString ? TIME_RANGE_REGEX.test(timeString) : true;
|
|
};
|
|
|
|
const isValidStartAndEndTime = (startTime?: string, endTime?: string): boolean => {
|
|
// empty time range is perfactly valid for a mute timing
|
|
if (!startTime && !endTime) {
|
|
return true;
|
|
}
|
|
|
|
if ((!startTime && endTime) || (startTime && !endTime)) {
|
|
return false;
|
|
}
|
|
|
|
const timeUnit = 'HH:mm';
|
|
// @ts-ignore typescript types here incorrect, sigh
|
|
const startDate = moment().startOf('day').add(startTime, timeUnit);
|
|
// @ts-ignore typescript types here incorrect, sigh
|
|
const endDate = moment().startOf('day').add(endTime, timeUnit);
|
|
|
|
if (startTime && endTime && startDate.isBefore(endDate)) {
|
|
return true;
|
|
}
|
|
|
|
if (startTime && endTime && endDate.isAfter(startDate)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
function renderTimeIntervals(muteTiming: MuteTimeInterval) {
|
|
const timeIntervals = muteTiming.time_intervals;
|
|
|
|
return timeIntervals.map((interval, index) => {
|
|
const { times, weekdays, days_of_month, months, years, location } = interval;
|
|
const timeString = getTimeString(times, location);
|
|
const weekdayString = getWeekdayString(weekdays);
|
|
const daysString = getDaysOfMonthString(days_of_month);
|
|
const monthsString = getMonthsString(months);
|
|
const yearsString = getYearsString(years);
|
|
|
|
return (
|
|
<React.Fragment key={JSON.stringify(interval) + index}>
|
|
{`${timeString} ${weekdayString}`}
|
|
<br />
|
|
{[daysString, monthsString, yearsString].join(' | ')}
|
|
<br />
|
|
</React.Fragment>
|
|
);
|
|
});
|
|
}
|
|
|
|
export { isvalidTimeFormat, isValidStartAndEndTime, renderTimeIntervals };
|