77 lines
1.7 KiB
JavaScript
77 lines
1.7 KiB
JavaScript
import test from 'brittle'
|
|
import { AnomalyEngine } from '../server/services/anomaly.js'
|
|
import { silenceAlert } from '../server/services/alerts.js'
|
|
|
|
test('silence TTL auto-reenables alert', (t) => {
|
|
const engine = new AnomalyEngine({ cpuCount: 2 })
|
|
// Use singleton path via silenceAlert — it mutates getAnomalyEngine().
|
|
// Drive a local engine for isolation instead:
|
|
const cfg = {
|
|
id: 'cpu_user_high',
|
|
chart: 'system.cpu',
|
|
dimension: 'user',
|
|
warn: 10,
|
|
crit: 50,
|
|
comparator: '>',
|
|
enabled: true,
|
|
info: 'test',
|
|
}
|
|
engine.setConfig(cfg)
|
|
engine.setConfig({
|
|
...cfg,
|
|
enabled: false,
|
|
_silencedUntil: Date.now() - 1000,
|
|
})
|
|
|
|
const fired = engine.evaluate([
|
|
{
|
|
chart: 'system.cpu',
|
|
context: 'system.cpu',
|
|
ts: Date.now(),
|
|
values: {
|
|
user: 80,
|
|
system: 0,
|
|
nice: 0,
|
|
iowait: 0,
|
|
irq: 0,
|
|
softirq: 0,
|
|
idle: 20,
|
|
steal: 0,
|
|
guest: 0,
|
|
guest_nice: 0,
|
|
},
|
|
},
|
|
])
|
|
|
|
t.ok(engine.configs.get('cpu_user_high').enabled === true)
|
|
t.ok(fired.length >= 1)
|
|
t.ok(silenceAlert) // keep import used / API present
|
|
})
|
|
|
|
test('silence still active before TTL', (t) => {
|
|
const engine = new AnomalyEngine({ cpuCount: 2 })
|
|
engine.setConfig({
|
|
id: 'cpu_user_high',
|
|
chart: 'system.cpu',
|
|
dimension: 'user',
|
|
warn: 10,
|
|
crit: 50,
|
|
comparator: '>',
|
|
enabled: false,
|
|
_silencedUntil: Date.now() + 60_000,
|
|
info: 'test',
|
|
})
|
|
|
|
const fired = engine.evaluate([
|
|
{
|
|
chart: 'system.cpu',
|
|
context: 'system.cpu',
|
|
ts: Date.now(),
|
|
values: { user: 90, idle: 10 },
|
|
},
|
|
])
|
|
|
|
t.is(fired.length, 0)
|
|
t.is(engine.configs.get('cpu_user_high').enabled, false)
|
|
})
|