mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-28 00:07:33 +00:00
Merge pull request #3258 from bwliangc/feat/channel-monitor-jitter
feat(渠道监控): 检测间隔支持正负随机抖动配置
This commit is contained in:
@@ -28,6 +28,8 @@ export interface ChannelMonitor {
|
||||
group_name: string
|
||||
enabled: boolean
|
||||
interval_seconds: number
|
||||
/** 每次调度在 interval 基础上 ± [0, jitter] 的随机偏移(秒),0 = 固定间隔 */
|
||||
jitter_seconds: number
|
||||
last_checked_at: string | null
|
||||
created_by: number
|
||||
created_at: string
|
||||
@@ -80,6 +82,7 @@ export interface CreateParams {
|
||||
group_name?: string
|
||||
enabled?: boolean
|
||||
interval_seconds: number
|
||||
jitter_seconds?: number
|
||||
template_id?: number | null
|
||||
extra_headers?: Record<string, string>
|
||||
body_override_mode?: BodyOverrideMode
|
||||
|
||||
@@ -109,6 +109,12 @@
|
||||
<p class="mt-1 text-xs text-gray-400">{{ t('admin.channelMonitor.form.intervalSecondsHint') }}</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="input-label">{{ t('admin.channelMonitor.form.jitterSeconds') }}</label>
|
||||
<input v-model.number="form.jitter_seconds" type="number" min="0" :max="maxJitterSeconds" class="input" />
|
||||
<p class="mt-1 text-xs text-gray-400">{{ t('admin.channelMonitor.form.jitterSecondsHint') }}</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between">
|
||||
<label class="input-label mb-0">{{ t('admin.channelMonitor.form.enabled') }}</label>
|
||||
<Toggle v-model="form.enabled" />
|
||||
@@ -254,6 +260,7 @@ interface MonitorForm {
|
||||
extra_models: string[]
|
||||
group_name: string
|
||||
interval_seconds: number
|
||||
jitter_seconds: number
|
||||
enabled: boolean
|
||||
// 高级设置快照
|
||||
template_id: number | null
|
||||
@@ -272,6 +279,7 @@ const form = reactive<MonitorForm>({
|
||||
extra_models: [],
|
||||
group_name: '',
|
||||
interval_seconds: systemDefaultInterval.value,
|
||||
jitter_seconds: 0,
|
||||
enabled: true,
|
||||
template_id: null,
|
||||
extra_headers: {},
|
||||
@@ -279,6 +287,9 @@ const form = reactive<MonitorForm>({
|
||||
body_override: null,
|
||||
})
|
||||
|
||||
// jitter 上限与后端校验一致:interval - jitter 不得低于最小检测间隔 15 秒。
|
||||
const maxJitterSeconds = computed<number>(() => Math.max(0, (form.interval_seconds || 0) - 15))
|
||||
|
||||
let suppressFormWatchers = false
|
||||
|
||||
// 可用模板列表(进入 dialog 时一次性拉取 cache;按 provider / api mode 过滤)。
|
||||
@@ -419,6 +430,7 @@ function resetForm() {
|
||||
form.extra_models = []
|
||||
form.group_name = ''
|
||||
form.interval_seconds = systemDefaultInterval.value
|
||||
form.jitter_seconds = 0
|
||||
form.enabled = true
|
||||
form.template_id = null
|
||||
form.extra_headers = {}
|
||||
@@ -438,6 +450,7 @@ function loadFromMonitor(m: ChannelMonitor) {
|
||||
form.extra_models = [...(m.extra_models || [])]
|
||||
form.group_name = m.group_name || ''
|
||||
form.interval_seconds = m.interval_seconds || systemDefaultInterval.value
|
||||
form.jitter_seconds = m.jitter_seconds || 0
|
||||
form.enabled = m.enabled
|
||||
form.template_id = m.template_id ?? null
|
||||
form.extra_headers = { ...(m.extra_headers || {}) }
|
||||
@@ -504,6 +517,7 @@ function buildPayload(): CreateParams {
|
||||
group_name: form.group_name.trim(),
|
||||
enabled: form.enabled,
|
||||
interval_seconds: form.interval_seconds,
|
||||
jitter_seconds: form.jitter_seconds || 0,
|
||||
template_id: form.template_id,
|
||||
extra_headers: form.extra_headers,
|
||||
body_override_mode: form.body_override_mode,
|
||||
|
||||
@@ -2840,6 +2840,8 @@ export default {
|
||||
groupNamePlaceholder: 'Optional, used to group rows in user view',
|
||||
intervalSeconds: 'Interval (seconds)',
|
||||
intervalSecondsHint: 'Range: 15 - 3600 seconds',
|
||||
jitterSeconds: 'Random Jitter (± seconds)',
|
||||
jitterSecondsHint: 'Each check fires at interval ± a random offset within this value; 0 means fixed interval. Interval minus jitter must be ≥ 15s',
|
||||
enabled: 'Enable monitor',
|
||||
kindRequired: 'Please select a provider'
|
||||
},
|
||||
|
||||
@@ -2917,6 +2917,8 @@ export default {
|
||||
groupNamePlaceholder: '可选,用于在用户视图中聚合显示',
|
||||
intervalSeconds: '检测间隔 (秒)',
|
||||
intervalSecondsHint: '范围:15 - 3600 秒',
|
||||
jitterSeconds: '随机抖动 (± 秒)',
|
||||
jitterSecondsHint: '每次检测在间隔基础上正负随机偏移该秒数,0 表示固定间隔;需满足 间隔 - 抖动 ≥ 15 秒',
|
||||
enabled: '启用监控',
|
||||
kindRequired: '请选择供应商'
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user