30 lines
2.2 KiB
TypeScript
30 lines
2.2 KiB
TypeScript
import { isStatisticsPivotDim, isStatisticsSliceKind } from './statistics-dims'
|
|
|
|
export const STATISTICS_CONTEXT_KEYS = ['dim', 'tab', 'view', 'planes', 'pivotRow', 'pivotCol', 'country', 'service', 'asn', 'serverId', 'userId', 'iface'] as const
|
|
|
|
export function statisticsContextError(params: URLSearchParams): string | null {
|
|
for (const key of STATISTICS_CONTEXT_KEYS) {
|
|
if (params.getAll(key).length > 1) return `Параметр ${key} указан несколько раз.`
|
|
const value = params.get(key)
|
|
if (value !== null && !value.trim()) return `Параметр ${key} пуст.`
|
|
}
|
|
for (const key of ['dim', 'tab']) {
|
|
const value = params.get(key)
|
|
if (value !== null && !isStatisticsSliceKind(value)) return 'Неизвестный разрез статистики.'
|
|
}
|
|
if (params.has('dim') && params.has('tab') && params.get('dim') !== params.get('tab')) return 'Параметры dim и tab задают разные разрезы.'
|
|
if (params.has('view') && !['explore', 'pivot'].includes(params.get('view')!)) return 'Неизвестный вид отчёта.'
|
|
if (params.has('planes') && !['unique', 'all'].includes(params.get('planes')!)) return 'Неизвестный режим учёта трафика.'
|
|
for (const key of ['pivotRow', 'pivotCol']) {
|
|
if (params.has(key) && !isStatisticsPivotDim(params.get(key)!)) return 'Неизвестное измерение сводки.'
|
|
}
|
|
if (params.get('view') === 'pivot' && (params.get('pivotRow') ?? 'country') === (params.get('pivotCol') ?? 'service')) return 'Выберите разные измерения строк и колонок.'
|
|
const serverId = params.get('serverId')?.trim()
|
|
if (serverId && (!/^\d+$/.test(serverId) || !Number.isSafeInteger(Number(serverId)) || Number(serverId) <= 0)) return 'ID сервера должен быть положительным целым числом.'
|
|
const asn = params.get('asn')?.trim()
|
|
if (asn && (!/^-?\d+$/.test(asn) || !Number.isSafeInteger(Number(asn)))) return 'ASN должен быть целым числом.'
|
|
const country = params.get('country')?.trim()
|
|
if (country && country.length !== 2) return 'Код страны должен состоять из двух символов.'
|
|
return null
|
|
}
|