debian-mirror-gitlab/app/assets/javascripts/monitoring/validators.js

56 lines
1.4 KiB
JavaScript
Raw Normal View History

2020-10-24 23:57:45 +05:30
import { isSafeURL } from '~/lib/utils/url_utility';
2021-03-08 18:12:59 +05:30
const isRunbookUrlValid = (runbookUrl) => {
2020-10-24 23:57:45 +05:30
if (!runbookUrl) {
return true;
}
return isSafeURL(runbookUrl);
};
2020-05-24 23:13:21 +05:30
// Prop validator for alert information, expecting an object like the example below.
//
// {
// '/root/autodevops-deploy/prometheus/alerts/16.json?environment_id=37': {
// alert_path: "/root/autodevops-deploy/prometheus/alerts/16.json?environment_id=37",
// metricId: '1',
// operator: ">",
// query: "rate(http_requests_total[5m])[30m:1m]",
// threshold: 0.002,
// title: "Core Usage (Total)",
2020-10-24 23:57:45 +05:30
// runbookUrl: "https://www.gitlab.com/my-project/-/wikis/runbook"
2020-05-24 23:13:21 +05:30
// }
// }
export function alertsValidator(value) {
2021-03-08 18:12:59 +05:30
return Object.keys(value).every((key) => {
2020-05-24 23:13:21 +05:30
const alert = value[key];
return (
alert.alert_path &&
key === alert.alert_path &&
alert.metricId &&
typeof alert.metricId === 'string' &&
alert.operator &&
2020-10-24 23:57:45 +05:30
typeof alert.threshold === 'number' &&
isRunbookUrlValid(alert.runbookUrl)
2020-05-24 23:13:21 +05:30
);
});
}
// Prop validator for query information, expecting an array like the example below.
//
// [
// {
// metricId: '16',
// label: 'Total Cores'
// },
// {
// metricId: '17',
// label: 'Sub-total Cores'
// }
// ]
export function queriesValidator(value) {
return value.every(
2021-03-08 18:12:59 +05:30
(query) =>
2020-05-24 23:13:21 +05:30
query.metricId && typeof query.metricId === 'string' && typeof query.label === 'string',
);
}