blob: 5b515baeb2ceed3e516cb7815f3d20dd969492a4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
// shunt - write suppression
//
// Remembers which (set, address) pairs were written recently so a repeated
// DNS answer does not rewrite an element that is still fresh.
//
// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (c) 2026 Dirk Brenken <dev@brenken.org>
export function create(entry_ttl) {
let last = {};
function due(set, addr, now) {
let k = `${set}/${addr}`;
let t = last[k];
if (t != null && (now - t) * 2 < entry_ttl)
return false;
last[k] = now;
return true;
}
function prune(now) {
let n = 0;
for (let k in last) {
if (now - last[k] >= entry_ttl) {
delete last[k];
n++;
}
}
return n;
}
function size() {
return length(keys(last));
}
return { due, prune, size };
};
|