feat: target 时间配置校验,interval 最小 10s,timeout 不大于 interval
在配置加载阶段新增通用 target 时间字段语义校验: - interval 解析后不得小于 10s - timeout 解析后不得大于同一 target 的 interval - 默认值(30s / 10s)参与校验 - 变量引用先解析再校验 - 格式错误优先于关系错误,避免级联提示
This commit is contained in:
@@ -32,6 +32,8 @@ const DEFAULT_ROTATION_SIZE = "50MB";
|
||||
const DEFAULT_ROTATION_FREQUENCY: RotationFrequency = "daily";
|
||||
const DEFAULT_ROTATION_MAX_FILES = 14;
|
||||
|
||||
const MINIMUM_INTERVAL_MS = parseDuration("10s");
|
||||
|
||||
const VALID_LOG_LEVELS: LogLevel[] = ["trace", "debug", "info", "warn", "error", "fatal"];
|
||||
const VALID_ROTATION_FREQUENCIES: RotationFrequency[] = ["hourly", "daily", "weekly"];
|
||||
|
||||
@@ -208,6 +210,14 @@ function resolveTarget(
|
||||
return result;
|
||||
}
|
||||
|
||||
function tryParseDuration(value: string): null | number {
|
||||
try {
|
||||
return parseDuration(value);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function validateConfig(config: NormalizedProbeConfig): ConfigValidationIssue[] {
|
||||
const issues: ConfigValidationIssue[] = [];
|
||||
if (!Array.isArray(config.targets) || config.targets.length === 0) {
|
||||
@@ -291,18 +301,21 @@ function validateConfig(config: NormalizedProbeConfig): ConfigValidationIssue[]
|
||||
: isString(targetIdValue)
|
||||
? targetIdValue
|
||||
: undefined;
|
||||
validateDurationValue(
|
||||
isString(targetRecord["interval"]) ? targetRecord["interval"] : undefined,
|
||||
`targets[${i}].interval`,
|
||||
issues,
|
||||
targetName,
|
||||
);
|
||||
validateDurationValue(
|
||||
isString(targetRecord["timeout"]) ? targetRecord["timeout"] : undefined,
|
||||
`targets[${i}].timeout`,
|
||||
issues,
|
||||
targetName,
|
||||
);
|
||||
const intervalRaw = isString(targetRecord["interval"]) ? targetRecord["interval"] : undefined;
|
||||
const timeoutRaw = isString(targetRecord["timeout"]) ? targetRecord["timeout"] : undefined;
|
||||
validateDurationValue(intervalRaw, `targets[${i}].interval`, issues, targetName);
|
||||
validateDurationValue(timeoutRaw, `targets[${i}].timeout`, issues, targetName);
|
||||
|
||||
const intervalMs = tryParseDuration(intervalRaw ?? DEFAULT_INTERVAL);
|
||||
const timeoutMs = tryParseDuration(timeoutRaw ?? DEFAULT_TIMEOUT);
|
||||
|
||||
if (intervalMs !== null && intervalMs < MINIMUM_INTERVAL_MS) {
|
||||
issues.push(issue("invalid-value", `targets[${i}].interval`, "interval 不能小于 10s", targetName));
|
||||
}
|
||||
|
||||
if (intervalMs !== null && timeoutMs !== null && timeoutMs > intervalMs) {
|
||||
issues.push(issue("invalid-value", `targets[${i}].timeout`, "timeout 不能大于 interval", targetName));
|
||||
}
|
||||
}
|
||||
|
||||
return issues;
|
||||
|
||||
Reference in New Issue
Block a user