next-observer 0.3.25 → 0.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/checks/watch.d.ts +13 -3
- package/dist/checks/watch.js +44 -4
- package/dist/checks/watch.js.map +1 -1
- package/dist/checks/words.d.ts +5 -0
- package/dist/checks/words.js +16 -1
- package/dist/checks/words.js.map +1 -1
- package/dist/debug/detector.d.ts +3 -1
- package/dist/ui/assets/index-CXUv4-u5.js +20 -0
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/index-D7VKDAxG.js +0 -20
package/README.md
CHANGED
|
@@ -60,6 +60,12 @@ this call compares with the others of its kind.
|
|
|
60
60
|
|
|
61
61
|

|
|
62
62
|
|
|
63
|
+
A span can be fast, without an error, and still carry the wrong answer. When the app records its own verdict as a span
|
|
64
|
+
event — `integrity_check` with `ok`, `expected`, `actual` — the observer raises an anomaly on the first `ok: false` and the
|
|
65
|
+
trace says so:
|
|
66
|
+
|
|
67
|
+

|
|
68
|
+
|
|
63
69
|
**One operation up close** — its latency distribution, and a note when the calls fall into two clearly separate speeds
|
|
64
70
|
(a fast and a slow path, or the version before and after a deployment).
|
|
65
71
|
|
|
@@ -190,8 +196,10 @@ traffic: it appears in the chat, and the investigation starts from the trace of
|
|
|
190
196
|
|
|
191
197
|
- twice in a row → `critical` (it is down now);
|
|
192
198
|
- 3 of the last 10 runs → `warning` (it is unreliable — a check failing every third time never fails twice in a row);
|
|
199
|
+
- an app that is down is **one** anomaly naming every check that cannot reach it — not one investigation per check;
|
|
193
200
|
- one failure is not an anomaly: the first answer after a restart is often just slow;
|
|
194
|
-
- the same check
|
|
201
|
+
- after an anomaly the same check — and, when nothing accepted the connection, the same address — is quiet for
|
|
202
|
+
5 minutes, whatever happens meanwhile; `OBSERVE_DETECTOR=off` switches this off too.
|
|
195
203
|
|
|
196
204
|
## Configuration
|
|
197
205
|
|
package/dist/checks/watch.d.ts
CHANGED
|
@@ -4,20 +4,30 @@ import type { Check } from './spec.js';
|
|
|
4
4
|
import { type CheckRule } from './types.js';
|
|
5
5
|
/** The rule's numbers default to CHECK_RULE: two in a row, or three of the last ten — a check failing every third time never fails twice in a row. */
|
|
6
6
|
export interface CheckWatchOptions extends Partial<CheckRule> {
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* After an anomaly the same check — and, when nothing accepted the connection, the same address — is quiet for this
|
|
9
|
+
* long, whatever happens meanwhile. Default 5 min, like the detector.
|
|
10
|
+
*/
|
|
8
11
|
cooldownMs?: number;
|
|
9
12
|
}
|
|
10
13
|
export declare class CheckWatch {
|
|
11
14
|
readonly options: Required<CheckWatchOptions>;
|
|
12
15
|
private readonly recent;
|
|
13
16
|
private readonly lastReportedMs;
|
|
17
|
+
/** When an outage of an address was last reported. */
|
|
18
|
+
private readonly addressReportedMs;
|
|
19
|
+
/** Checks whose latest run got no connection, with the address they could not reach. */
|
|
20
|
+
private readonly down;
|
|
14
21
|
private pending;
|
|
15
22
|
private seq;
|
|
16
23
|
constructor(options?: CheckWatchOptions);
|
|
17
24
|
/** The numbers in force — what the Checks page colours by. */
|
|
18
25
|
get rule(): CheckRule;
|
|
19
|
-
/**
|
|
20
|
-
|
|
26
|
+
/**
|
|
27
|
+
* The runner's `onResult`; `failures` is its count of failed runs in a row — the same number the Checks page shows.
|
|
28
|
+
* `url` is where the request really went (a check's own `url` may be just a path): the address is taken from it.
|
|
29
|
+
*/
|
|
30
|
+
observe: (check: Check, result: CheckResult, failures: number, url: string) => void;
|
|
21
31
|
/** New anomalies since the last call. */
|
|
22
32
|
take(): Anomaly[];
|
|
23
33
|
}
|
package/dist/checks/watch.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { CHECK_RULE } from './types.js';
|
|
2
|
+
import { originOf } from './words.js';
|
|
2
3
|
const DEFAULTS = { ...CHECK_RULE, cooldownMs: 300_000 };
|
|
3
4
|
export class CheckWatch {
|
|
4
5
|
options;
|
|
5
6
|
recent = new Map();
|
|
6
7
|
lastReportedMs = new Map();
|
|
8
|
+
/** When an outage of an address was last reported. */
|
|
9
|
+
addressReportedMs = new Map();
|
|
10
|
+
/** Checks whose latest run got no connection, with the address they could not reach. */
|
|
11
|
+
down = new Map();
|
|
7
12
|
pending = [];
|
|
8
13
|
seq = 0;
|
|
9
14
|
constructor(options = {}) {
|
|
@@ -14,24 +19,45 @@ export class CheckWatch {
|
|
|
14
19
|
const { failuresInRow, shareWindow, shareFailures } = this.options;
|
|
15
20
|
return { failuresInRow, shareWindow, shareFailures };
|
|
16
21
|
}
|
|
17
|
-
/**
|
|
18
|
-
|
|
22
|
+
/**
|
|
23
|
+
* The runner's `onResult`; `failures` is its count of failed runs in a row — the same number the Checks page shows.
|
|
24
|
+
* `url` is where the request really went (a check's own `url` may be just a path): the address is taken from it.
|
|
25
|
+
*/
|
|
26
|
+
observe = (check, result, failures, url) => {
|
|
19
27
|
const o = this.options;
|
|
20
28
|
const recent = this.recent.get(check.name) ?? [];
|
|
21
29
|
recent.push(result.ok);
|
|
22
30
|
if (recent.length > o.shareWindow)
|
|
23
31
|
recent.shift();
|
|
24
32
|
this.recent.set(check.name, recent);
|
|
33
|
+
const origin = originOf(url);
|
|
34
|
+
if (result.unreachable)
|
|
35
|
+
this.down.set(check.name, origin);
|
|
36
|
+
else
|
|
37
|
+
this.down.delete(check.name);
|
|
25
38
|
if (result.ok)
|
|
26
39
|
return;
|
|
27
40
|
const failed = recent.filter((ok) => !ok).length;
|
|
28
41
|
const inRow = failures >= o.failuresInRow;
|
|
29
42
|
if (!inRow && failed < o.shareFailures)
|
|
30
43
|
return;
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
// A clock set back (NTP, a laptop waking up) must not keep anyone quiet for longer: a negative age is no cooldown.
|
|
45
|
+
const quiet = (last) => last !== undefined && result.atMs >= last && result.atMs - last < o.cooldownMs;
|
|
46
|
+
if (quiet(this.lastReportedMs.get(check.name)))
|
|
33
47
|
return;
|
|
48
|
+
// Set even when the address turns out to be quiet below: this failure is part of the outage already reported,
|
|
49
|
+
// and the first slow answer of the restarted app is not worth an anomaly of its own either.
|
|
34
50
|
this.lastReportedMs.set(check.name, result.atMs);
|
|
51
|
+
// No connection, repeatedly: an outage. (A flaky check tipped over its share by one refused connection is not —
|
|
52
|
+
// it must not make the address quiet before the outage itself is reported.)
|
|
53
|
+
const outage = result.unreachable === true && inRow;
|
|
54
|
+
if (outage) {
|
|
55
|
+
// An app that is down fails every check of it the same way: one anomaly says so, the rest would only queue the
|
|
56
|
+
// same investigation again. Checks with other intervals reach the rule later — the address is quiet by then.
|
|
57
|
+
if (quiet(this.addressReportedMs.get(origin)))
|
|
58
|
+
return;
|
|
59
|
+
this.addressReportedMs.set(origin, result.atMs);
|
|
60
|
+
}
|
|
35
61
|
this.pending.push({
|
|
36
62
|
id: `check_failed-${result.atMs}-${++this.seq}`,
|
|
37
63
|
type: 'check_failed',
|
|
@@ -53,6 +79,8 @@ export class CheckWatch {
|
|
|
53
79
|
...(result.status === undefined ? {} : { status: result.status }),
|
|
54
80
|
...(result.unreachable ? { unreachable: true } : {}),
|
|
55
81
|
traceId: result.traceId,
|
|
82
|
+
// No connection, repeatedly: maybe the whole app — take() adds the other checks that cannot reach it either.
|
|
83
|
+
...(outage ? { origin } : {}),
|
|
56
84
|
},
|
|
57
85
|
});
|
|
58
86
|
};
|
|
@@ -60,6 +88,18 @@ export class CheckWatch {
|
|
|
60
88
|
take() {
|
|
61
89
|
const found = this.pending;
|
|
62
90
|
this.pending = [];
|
|
91
|
+
// Filled in only now: the other checks of a dead app report their own failures a moment after the first one.
|
|
92
|
+
// A check with a longer interval may still be on its last good run — it is then missing from the list, and quiet
|
|
93
|
+
// about this outage when its turn comes.
|
|
94
|
+
for (const { check } of found) {
|
|
95
|
+
if (!check?.origin)
|
|
96
|
+
continue;
|
|
97
|
+
const also = [...this.down].filter(([name, at]) => at === check.origin && name !== check.name).map(([name]) => name).sort();
|
|
98
|
+
if (also.length > 0)
|
|
99
|
+
check.alsoUnreachable = also;
|
|
100
|
+
else
|
|
101
|
+
delete check.origin;
|
|
102
|
+
}
|
|
63
103
|
return found;
|
|
64
104
|
}
|
|
65
105
|
}
|
package/dist/checks/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/checks/watch.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/checks/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/checks/words.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** "http://localhost:3000" of a check's address — what is down when nothing there accepts a connection. */
|
|
2
|
+
export declare function originOf(url: string): string;
|
|
1
3
|
export interface CheckFailure {
|
|
2
4
|
name: string;
|
|
3
5
|
method: string;
|
|
@@ -12,6 +14,9 @@ export interface CheckFailure {
|
|
|
12
14
|
/** No connection was made: there cannot be a trace. Neither flag: nobody knows whether the request arrived. */
|
|
13
15
|
unreachable?: boolean;
|
|
14
16
|
traceId: string;
|
|
17
|
+
/** Other checks that get no connection to the same address (`origin`) either: the app is down, not one route. */
|
|
18
|
+
alsoUnreachable?: string[];
|
|
19
|
+
origin?: string;
|
|
15
20
|
}
|
|
16
21
|
/** Where to look after a failed run: its trace, when there can be one. */
|
|
17
22
|
export declare function whereToLook(f: Pick<CheckFailure, 'answered' | 'unreachable' | 'traceId'>): string;
|
package/dist/checks/words.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
// The question about a failing check — one wording for the anomaly the observer raises and for the Investigate button.
|
|
2
2
|
// No Node code here: the UI imports it too.
|
|
3
|
+
/** "http://localhost:3000" of a check's address — what is down when nothing there accepts a connection. */
|
|
4
|
+
export function originOf(url) {
|
|
5
|
+
// try/catch, not URL.canParse: this runs in the browser too, and older ones do not have it.
|
|
6
|
+
try {
|
|
7
|
+
return new URL(url).origin;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return url;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
3
13
|
/** Where to look after a failed run: its trace, when there can be one. */
|
|
4
14
|
export function whereToLook(f) {
|
|
5
15
|
// A request that reached nobody left no trace: sending the agents after one would have them report "trace not found".
|
|
@@ -11,6 +21,11 @@ export function whereToLook(f) {
|
|
|
11
21
|
}
|
|
12
22
|
export function checkFailureQuestion(f) {
|
|
13
23
|
const how = f.rule === 'in_row' ? `failed ${f.count} ${f.count === 1 ? 'time' : 'times'} in a row` : `failed ${f.count} of its last ${f.runs} runs`;
|
|
14
|
-
|
|
24
|
+
const question = `the scheduled check "${f.name}" (${f.method} ${f.url}) ${how}. Last failure: ${f.reason}. ${whereToLook(f)}`;
|
|
25
|
+
const also = f.alsoUnreachable ?? [];
|
|
26
|
+
if (also.length === 0)
|
|
27
|
+
return question;
|
|
28
|
+
const others = also.length === 1 ? `Another check gets no connection either (${also[0]})` : `${also.length} other checks get no connection either (${also.join(', ')})`;
|
|
29
|
+
return `${question} ${others}: ${f.origin ?? 'the app'} looks down as a whole, not one route.`;
|
|
15
30
|
}
|
|
16
31
|
//# sourceMappingURL=words.js.map
|
package/dist/checks/words.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/checks/words.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,4CAA4C;
|
|
1
|
+
{"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/checks/words.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,4CAA4C;AAE5C,2GAA2G;AAC3G,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,4FAA4F;IAC5F,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAqBD,0EAA0E;AAC1E,MAAM,UAAU,WAAW,CAAC,CAA6D;IACvF,sHAAsH;IACtH,IAAI,CAAC,CAAC,WAAW;QAAE,OAAO,qHAAqH,CAAA;IAC/I,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,sDAAsD,CAAC,CAAC,OAAO,0EAA0E,CAAA;IAChK,OAAO,4DAA4D,CAAC,CAAC,OAAO,8LAA8L,CAAA;AAC5Q,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAe;IAClD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,IAAI,OAAO,CAAA;IACnJ,MAAM,QAAQ,GAAG,wBAAwB,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,mBAAmB,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9H,MAAM,IAAI,GAAG,CAAC,CAAC,eAAe,IAAI,EAAE,CAAA;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,4CAA4C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,2CAA2C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;IACvK,OAAO,GAAG,QAAQ,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,SAAS,wCAAwC,CAAA;AAChG,CAAC"}
|
package/dist/debug/detector.d.ts
CHANGED
|
@@ -48,7 +48,9 @@ export interface Anomaly {
|
|
|
48
48
|
reason: string;
|
|
49
49
|
status?: number;
|
|
50
50
|
unreachable?: true;
|
|
51
|
-
traceId: string;
|
|
51
|
+
traceId: string; /** Set when other checks get no connection to the same address either: the app is down, not one route. */
|
|
52
|
+
origin?: string;
|
|
53
|
+
alsoUnreachable?: string[];
|
|
52
54
|
};
|
|
53
55
|
}
|
|
54
56
|
export interface DetectorOptions {
|