pipework 0.172.0 → 0.174.0
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/CHANGELOG.md +21 -0
- package/REFERENCE.md +22 -0
- package/dist/REFERENCE.md +131 -10
- package/dist/auth/auth/sessions.d.ts +2 -2
- package/dist/auth/auth/sessions.d.ts.map +1 -1
- package/dist/auth/auth/sessions.js.map +1 -1
- package/dist/core/errors/http.d.ts +1 -1
- package/dist/core/errors/http.d.ts.map +1 -1
- package/dist/core/errors/http.js.map +1 -1
- package/dist/core/pipework.d.ts +2 -1
- package/dist/core/pipework.d.ts.map +1 -1
- package/dist/core/pipework.js.map +1 -1
- package/dist/data/db/readonly.d.ts +14 -0
- package/dist/data/db/readonly.d.ts.map +1 -0
- package/dist/data/db/readonly.js +2 -0
- package/dist/data/db/readonly.js.map +1 -0
- package/dist/data/domain/define.d.ts.map +1 -1
- package/dist/data/domain/define.js.map +1 -1
- package/dist/data/domain/types.d.ts +3 -2
- package/dist/data/domain/types.d.ts.map +1 -1
- package/dist/data/domain/types.js.map +1 -1
- package/dist/data/query/pg-core/primary-keys.d.ts +2 -2
- package/dist/data/query/pg-core/primary-keys.d.ts.map +1 -1
- package/dist/data/query/pg-core/primary-keys.js +1 -1
- package/dist/data/query/pg-core/primary-keys.js.map +1 -1
- package/dist/data/query/pg-core/query-builders/insert.d.ts +3 -2
- package/dist/data/query/pg-core/query-builders/insert.d.ts.map +1 -1
- package/dist/data/query/pg-core/query-builders/insert.js +2 -2
- package/dist/data/query/pg-core/query-builders/insert.js.map +1 -1
- package/dist/data/query/pg-core/query-builders/update.d.ts +2 -1
- package/dist/data/query/pg-core/query-builders/update.d.ts.map +1 -1
- package/dist/data/query/pg-core/query-builders/update.js.map +1 -1
- package/dist/data/query/sql/expressions/conditions.d.ts +14 -13
- package/dist/data/query/sql/expressions/conditions.d.ts.map +1 -1
- package/dist/data/query/sql/expressions/conditions.js.map +1 -1
- package/dist/data/vector/query.d.ts +4 -4
- package/dist/data/vector/query.d.ts.map +1 -1
- package/dist/data/vector/query.js.map +1 -1
- package/dist/data/write/values.d.ts +2 -13
- package/dist/data/write/values.d.ts.map +1 -1
- package/dist/infra/alerts/handle.d.ts +2 -2
- package/dist/infra/alerts/handle.d.ts.map +1 -1
- package/dist/infra/alerts/namespace.d.ts +12 -1
- package/dist/infra/alerts/namespace.d.ts.map +1 -1
- package/dist/infra/alerts/namespace.js +12 -1
- package/dist/infra/alerts/namespace.js.map +1 -1
- package/dist/infra/alerts/sources.d.ts +64 -0
- package/dist/infra/alerts/sources.d.ts.map +1 -1
- package/dist/infra/alerts/sources.js +246 -161
- package/dist/infra/alerts/sources.js.map +1 -1
- package/dist/infra/alerts/subsystem-sources.d.ts +42 -0
- package/dist/infra/alerts/subsystem-sources.d.ts.map +1 -0
- package/dist/infra/alerts/subsystem-sources.js +152 -0
- package/dist/infra/alerts/subsystem-sources.js.map +1 -0
- package/dist/infra/quota/handle.d.ts +2 -1
- package/dist/infra/quota/handle.d.ts.map +1 -1
- package/dist/infra/quota/handle.js +1 -1
- package/dist/infra/quota/handle.js.map +1 -1
- package/dist/infra/webhook/outbound.d.ts +5 -1
- package/dist/infra/webhook/outbound.d.ts.map +1 -1
- package/dist/infra/webhook/outbound.js +3 -1
- package/dist/infra/webhook/outbound.js.map +1 -1
- package/dist/request/fixture/batch.d.ts +1 -1
- package/dist/request/fixture/batch.d.ts.map +1 -1
- package/dist/request/fixture/batch.js.map +1 -1
- package/dist/request/fixture/types.d.ts +2 -2
- package/dist/request/fixture/types.d.ts.map +1 -1
- package/dist/request/http/rate-limit-classes.js.map +1 -1
- package/dist/request/http/server.js +1 -1
- package/dist/request/http/server.js.map +1 -1
- package/dist/request/http/types.d.ts +15 -15
- package/dist/request/http/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,10 +4,133 @@ import { pipeSystem } from '../../data/db/db.js';
|
|
|
4
4
|
import { assertValidIdentifier, quoteIdentifier } from '../../data/db/identifiers.js';
|
|
5
5
|
import { ALERTS_TICK_LOOP, LOOP_BEATS_QUERY, staleLoops } from './beat.js';
|
|
6
6
|
import { getContext } from '../../request/context/store.js';
|
|
7
|
+
function assertSourceName(name, who) {
|
|
8
|
+
if (typeof name !== 'string' || name === '' || name.includes(':')) {
|
|
9
|
+
throw new Error(`[pipework] ${who}: name must be a non-empty string without ':', got ${JSON.stringify(name)}.`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function ownerFields(options) {
|
|
13
|
+
return {
|
|
14
|
+
...(options.owner !== undefined ? { owner: options.owner } : {}),
|
|
15
|
+
...(options.runbook !== undefined ? { runbook: options.runbook } : {}),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** One source from several: it evaluates each in turn and owns what any of them owns. */
|
|
19
|
+
export function composeSources(name, parts) {
|
|
20
|
+
const owning = parts.filter(p => p.owns !== undefined);
|
|
21
|
+
return {
|
|
22
|
+
name,
|
|
23
|
+
...(owning.length > 0 ? { owns: (key) => owning.some(p => p.owns(key)) } : {}),
|
|
24
|
+
async evaluate() {
|
|
25
|
+
const out = [];
|
|
26
|
+
for (const part of parts)
|
|
27
|
+
out.push(...await part.evaluate());
|
|
28
|
+
return out;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* For a condition that is true right now: runs `query` (as the system, any tenant) on every tick and raises
|
|
34
|
+
* `${name}:${id}` for each row. An open alert under `${name}:` that a tick no longer returns is resolved.
|
|
35
|
+
*/
|
|
36
|
+
export function querySource(options) {
|
|
37
|
+
assertSourceName(options.name, 'alerts.source.query');
|
|
38
|
+
const prefix = `${options.name}:`;
|
|
39
|
+
const severity = options.severity ?? 'error';
|
|
40
|
+
return {
|
|
41
|
+
name: options.name,
|
|
42
|
+
owns: key => key.startsWith(prefix),
|
|
43
|
+
async evaluate() {
|
|
44
|
+
const rows = await pipeSystem(options.database).execute(options.query);
|
|
45
|
+
return rows.map((r) => {
|
|
46
|
+
const subject = options.subject?.(r);
|
|
47
|
+
const context = options.context?.(r);
|
|
48
|
+
return {
|
|
49
|
+
key: `${prefix}${options.id(r)}`,
|
|
50
|
+
severity,
|
|
51
|
+
message: options.message(r),
|
|
52
|
+
...(subject !== undefined ? { subject } : {}),
|
|
53
|
+
...ownerFields(options),
|
|
54
|
+
...(context !== undefined ? { context } : {}),
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* For a condition that is "new since the last tick": raises `${name}:${id}` for each group of rows in `table`
|
|
62
|
+
* stamped in `at` after the cursor. The cursor lives in `pipework_alert_source_state`, shared by every process;
|
|
63
|
+
* the first evaluation only stores it, so history is not replayed. Each evaluation reads rows with
|
|
64
|
+
* `cursor < at <= clock_timestamp() - settleMs` and moves the cursor to that upper bound, so a row stamped with
|
|
65
|
+
* its transaction's start time that commits within `settleMs` is still read. `settleMs` must exceed the longest
|
|
66
|
+
* transaction that writes the table. It has no `owns`: the condition clears by the handle's quiet period
|
|
67
|
+
* (`resolveAfterQuietMs` on `alerts.create`).
|
|
68
|
+
*/
|
|
69
|
+
export function newRowsSource(options) {
|
|
70
|
+
assertSourceName(options.name, 'alerts.source.newRows');
|
|
71
|
+
const settleMs = options.settleMs ?? 30_000;
|
|
72
|
+
if (typeof settleMs !== 'number' || !Number.isFinite(settleMs) || settleMs < 0) {
|
|
73
|
+
throw new Error(`[pipework] alerts.source.newRows settleMs must be a non-negative number of milliseconds, got ${String(settleMs)}.`);
|
|
74
|
+
}
|
|
75
|
+
const table = quoteIdentifier(options.table, 'newRows table');
|
|
76
|
+
const at = `t.${quoteIdentifier(options.at, 'newRows at column')}`;
|
|
77
|
+
const group = typeof options.groupBy === 'string' ? sql.raw(`t.${quoteIdentifier(options.groupBy, 'newRows groupBy column')}`) : options.groupBy;
|
|
78
|
+
const total = options.sum === undefined ? sql `0` : sql.raw(`sum(t.${quoteIdentifier(options.sum, 'newRows sum column')})`);
|
|
79
|
+
const where = options.where === undefined ? sql `` : sql `AND (${options.where})`;
|
|
80
|
+
const stateKey = options.stateKey ?? options.name;
|
|
81
|
+
const severity = options.severity ?? 'error';
|
|
82
|
+
const prefix = `${options.name}:`;
|
|
83
|
+
return {
|
|
84
|
+
name: options.name,
|
|
85
|
+
async evaluate() {
|
|
86
|
+
const db = pipeSystem(options.database);
|
|
87
|
+
const first = await db.execute(sql `
|
|
88
|
+
INSERT INTO pipework_alert_source_state (name, cursor_at)
|
|
89
|
+
VALUES (${stateKey}, clock_timestamp() - ${settleMs} * interval '1 millisecond')
|
|
90
|
+
ON CONFLICT (name) DO NOTHING RETURNING name`);
|
|
91
|
+
if (first.length > 0)
|
|
92
|
+
return [];
|
|
93
|
+
const rows = await db.execute(sql `
|
|
94
|
+
WITH cur AS (
|
|
95
|
+
SELECT cursor_at, clock_timestamp() - ${settleMs} * interval '1 millisecond' AS upto
|
|
96
|
+
FROM pipework_alert_source_state WHERE name = ${stateKey} FOR UPDATE),
|
|
97
|
+
totals AS (
|
|
98
|
+
SELECT (${group})::text AS gid, count(*)::int AS n, (${total})::float8 AS total
|
|
99
|
+
FROM ${sql.raw(table)} t, cur
|
|
100
|
+
WHERE ${sql.raw(at)} > cur.cursor_at AND ${sql.raw(at)} <= cur.upto ${where}
|
|
101
|
+
GROUP BY 1),
|
|
102
|
+
newest AS (
|
|
103
|
+
SELECT DISTINCT ON (1) (${group})::text AS gid, to_jsonb(t) AS last
|
|
104
|
+
FROM ${sql.raw(table)} t, cur
|
|
105
|
+
WHERE ${sql.raw(at)} > cur.cursor_at AND ${sql.raw(at)} <= cur.upto ${where}
|
|
106
|
+
ORDER BY 1, ${sql.raw(at)} DESC),
|
|
107
|
+
found AS (
|
|
108
|
+
SELECT totals.gid AS id, n, total, last FROM totals JOIN newest ON newest.gid IS NOT DISTINCT FROM totals.gid),
|
|
109
|
+
moved AS (
|
|
110
|
+
UPDATE pipework_alert_source_state s SET cursor_at = GREATEST(s.cursor_at, cur.upto)
|
|
111
|
+
FROM cur WHERE s.name = ${stateKey} RETURNING 1)
|
|
112
|
+
SELECT id, n, total, last, (SELECT count(*) FROM moved) AS moved FROM found ORDER BY id`);
|
|
113
|
+
return rows.map((r) => {
|
|
114
|
+
const last = (typeof r['last'] === 'string' ? JSON.parse(r['last']) : r['last']);
|
|
115
|
+
const g = { id: r['id'] === null ? '(none)' : String(r['id']), count: Number(r['n']), last, sum: Number(r['total']) };
|
|
116
|
+
const subject = options.subject?.(g);
|
|
117
|
+
const context = options.context?.(g);
|
|
118
|
+
return {
|
|
119
|
+
key: `${prefix}${g.id}`,
|
|
120
|
+
severity,
|
|
121
|
+
message: options.message(g),
|
|
122
|
+
...(subject !== undefined ? { subject } : {}),
|
|
123
|
+
...ownerFields(options),
|
|
124
|
+
...(context !== undefined ? { context } : {}),
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
7
130
|
function jobsTable(table) {
|
|
8
131
|
const name = table ?? 'pipework_jobs';
|
|
9
132
|
assertValidIdentifier(name, 'queue table');
|
|
10
|
-
return
|
|
133
|
+
return name;
|
|
11
134
|
}
|
|
12
135
|
/**
|
|
13
136
|
* Raises `job-dead-letter:<jobType>` for jobs that exhausted their attempts since the last
|
|
@@ -15,6 +138,7 @@ function jobsTable(table) {
|
|
|
15
138
|
* evaluation starts from now, so history is not replayed). The condition clears only by the
|
|
16
139
|
* handle's quiet period, so set `resolveAfterQuietMs` on `alerts.create`. `types` limits it to those job
|
|
17
140
|
* types and `excludeTypes` leaves them out (not both, neither empty); each filter keeps its own position.
|
|
141
|
+
* Jobs are read `settleMs` (default 30_000) after they dead-letter, so one that commits late is not missed.
|
|
18
142
|
* Conditions carry `owner`, `runbook` and a context of `count` and `lastError`.
|
|
19
143
|
*/
|
|
20
144
|
export function deadLetterSource(options = {}) {
|
|
@@ -27,7 +151,6 @@ export function deadLetterSource(options = {}) {
|
|
|
27
151
|
}
|
|
28
152
|
}
|
|
29
153
|
const jobs = jobsTable(options.table);
|
|
30
|
-
const severity = options.severity ?? 'error';
|
|
31
154
|
const name = 'job-dead-letter';
|
|
32
155
|
const mode = options.types !== undefined ? 'only' : options.excludeTypes !== undefined ? 'except' : null;
|
|
33
156
|
const listed = [...new Set(options.types ?? options.excludeTypes ?? [])].sort();
|
|
@@ -35,65 +158,47 @@ export function deadLetterSource(options = {}) {
|
|
|
35
158
|
const stateKey = mode === null ? name
|
|
36
159
|
: `${name}:${mode}:${joined.length > 200 ? createHash('sha256').update(joined).digest('hex') : joined}`;
|
|
37
160
|
const listJson = JSON.stringify(listed);
|
|
38
|
-
const typeFilter = mode === 'only' ? sql `AND
|
|
39
|
-
: mode === 'except' ? sql `AND
|
|
161
|
+
const typeFilter = mode === 'only' ? sql `AND t.job_type IN (SELECT jsonb_array_elements_text(${listJson}::jsonb))`
|
|
162
|
+
: mode === 'except' ? sql `AND t.job_type NOT IN (SELECT jsonb_array_elements_text(${listJson}::jsonb))`
|
|
40
163
|
: sql ``;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const first = await db.execute(sql `
|
|
46
|
-
INSERT INTO pipework_alert_source_state (name, cursor_at) VALUES (${stateKey}, clock_timestamp())
|
|
47
|
-
ON CONFLICT (name) DO NOTHING RETURNING name`);
|
|
48
|
-
if (first.length > 0)
|
|
49
|
-
return [];
|
|
50
|
-
const rows = await db.execute(sql `
|
|
51
|
-
WITH cur AS (SELECT cursor_at FROM pipework_alert_source_state WHERE name = ${stateKey} FOR UPDATE),
|
|
52
|
-
found AS (
|
|
53
|
-
SELECT j.job_type, count(*)::int AS n, max(j.completed_at) AS hi,
|
|
54
|
-
(array_agg(j.error_payload->>'message' ORDER BY j.completed_at DESC))[1] AS last_error
|
|
55
|
-
FROM ${sql.raw(jobs)} j, cur
|
|
56
|
-
WHERE j.status = 'dead_letter' AND j.completed_at > cur.cursor_at ${typeFilter}
|
|
57
|
-
GROUP BY j.job_type),
|
|
58
|
-
moved AS (
|
|
59
|
-
UPDATE pipework_alert_source_state s SET cursor_at = GREATEST(s.cursor_at, (SELECT max(hi) FROM found))
|
|
60
|
-
WHERE s.name = ${stateKey} AND EXISTS (SELECT 1 FROM found) RETURNING 1)
|
|
61
|
-
SELECT job_type, n, last_error, (SELECT count(*) FROM moved) AS moved FROM found ORDER BY job_type`);
|
|
62
|
-
return rows.map(r => ({
|
|
63
|
-
key: `job-dead-letter:${String(r['job_type'])}`,
|
|
64
|
-
severity,
|
|
65
|
-
message: `${String(r['n'])} ${String(r['job_type'])} job(s) dead-lettered`
|
|
66
|
-
+ (r['last_error'] !== null && r['last_error'] !== undefined ? `; last error: ${String(r['last_error'])}` : ''),
|
|
67
|
-
subject: { entity: 'job', entityId: String(r['job_type']) },
|
|
68
|
-
...(options.owner !== undefined ? { owner: options.owner } : {}),
|
|
69
|
-
...(options.runbook !== undefined ? { runbook: options.runbook } : {}),
|
|
70
|
-
context: { count: Number(r['n']), lastError: r['last_error'] === null || r['last_error'] === undefined ? null : String(r['last_error']) },
|
|
71
|
-
}));
|
|
72
|
-
},
|
|
164
|
+
const lastError = (g) => {
|
|
165
|
+
const payload = g.last['error_payload'];
|
|
166
|
+
const message = typeof payload === 'object' && payload !== null ? payload['message'] : undefined;
|
|
167
|
+
return message === null || message === undefined ? null : String(message);
|
|
73
168
|
};
|
|
169
|
+
return newRowsSource({
|
|
170
|
+
name,
|
|
171
|
+
stateKey,
|
|
172
|
+
table: jobs,
|
|
173
|
+
at: 'completed_at',
|
|
174
|
+
where: sql `t.status = 'dead_letter' ${typeFilter}`,
|
|
175
|
+
groupBy: 'job_type',
|
|
176
|
+
...(options.settleMs !== undefined ? { settleMs: options.settleMs } : {}),
|
|
177
|
+
...(options.severity !== undefined ? { severity: options.severity } : {}),
|
|
178
|
+
...(options.database !== undefined ? { database: options.database } : {}),
|
|
179
|
+
...ownerFields(options),
|
|
180
|
+
message: g => `${String(g.count)} ${g.id} job(s) dead-lettered` + (lastError(g) !== null ? `; last error: ${lastError(g)}` : ''),
|
|
181
|
+
subject: g => ({ entity: 'job', entityId: g.id }),
|
|
182
|
+
context: g => ({ count: g.count, lastError: lastError(g) }),
|
|
183
|
+
});
|
|
74
184
|
}
|
|
75
185
|
/** Raises `job-long-running:<jobType>` while a job of that type has been claimed for longer than `olderThanMs`; resolves when none is. */
|
|
76
186
|
export function longRunningSource(options) {
|
|
77
|
-
const jobs = jobsTable(options.table);
|
|
78
|
-
|
|
79
|
-
return {
|
|
187
|
+
const jobs = quoteIdentifier(jobsTable(options.table), 'queue table');
|
|
188
|
+
return querySource({
|
|
80
189
|
name: 'job-long-running',
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
subject: { entity: 'job', entityId: String(r['job_type']) },
|
|
94
|
-
}));
|
|
95
|
-
},
|
|
96
|
-
};
|
|
190
|
+
severity: options.severity ?? 'warning',
|
|
191
|
+
...(options.database !== undefined ? { database: options.database } : {}),
|
|
192
|
+
query: sql `
|
|
193
|
+
SELECT job_type, count(*)::int AS n, (extract(epoch FROM clock_timestamp() - min(claimed_at)) * 1000)::bigint AS oldest_ms
|
|
194
|
+
FROM ${sql.raw(jobs)}
|
|
195
|
+
WHERE status IN ('claimed', 'running')
|
|
196
|
+
AND claimed_at < clock_timestamp() - ${options.olderThanMs} * interval '1 millisecond'
|
|
197
|
+
GROUP BY job_type ORDER BY job_type`,
|
|
198
|
+
id: r => String(r['job_type']),
|
|
199
|
+
message: r => `${String(r['n'])} ${String(r['job_type'])} job(s) running for more than ${String(options.olderThanMs)} ms (oldest ${String(r['oldest_ms'])} ms)`,
|
|
200
|
+
subject: r => ({ entity: 'job', entityId: String(r['job_type']) }),
|
|
201
|
+
});
|
|
97
202
|
}
|
|
98
203
|
/**
|
|
99
204
|
* Raises `queue-backlog:<jobType>` while more than `maxPending` jobs of a type are ready to claim, or the
|
|
@@ -104,40 +209,31 @@ export function backlogSource(options) {
|
|
|
104
209
|
if (options.maxPending === undefined && options.maxOldestAgeMs === undefined) {
|
|
105
210
|
throw new Error('[pipework] alerts.source.backlog needs maxPending, maxOldestAgeMs or both.');
|
|
106
211
|
}
|
|
107
|
-
const jobs = jobsTable(options.table);
|
|
108
|
-
const severity = options.severity ?? 'warning';
|
|
212
|
+
const jobs = quoteIdentifier(jobsTable(options.table), 'queue table');
|
|
109
213
|
const maxPending = options.maxPending ?? null;
|
|
110
214
|
const maxAge = options.maxOldestAgeMs ?? null;
|
|
111
|
-
return {
|
|
215
|
+
return querySource({
|
|
112
216
|
name: 'queue-backlog',
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
subject: { entity: 'job', entityId: String(r['job_type']) },
|
|
134
|
-
...(options.owner !== undefined ? { owner: options.owner } : {}),
|
|
135
|
-
...(options.runbook !== undefined ? { runbook: options.runbook } : {}),
|
|
136
|
-
context: { ready: Number(r['n']), running: Number(r['running']), oldestReadyWaitMs: oldest },
|
|
137
|
-
};
|
|
138
|
-
});
|
|
139
|
-
},
|
|
140
|
-
};
|
|
217
|
+
severity: options.severity ?? 'warning',
|
|
218
|
+
...(options.database !== undefined ? { database: options.database } : {}),
|
|
219
|
+
...ownerFields(options),
|
|
220
|
+
query: sql `
|
|
221
|
+
SELECT job_type, n, running, oldest_ms FROM (
|
|
222
|
+
SELECT job_type,
|
|
223
|
+
(count(*) FILTER (WHERE status = 'pending' AND (next_retry_at IS NULL OR next_retry_at <= clock_timestamp())))::int AS n,
|
|
224
|
+
(count(*) FILTER (WHERE status IN ('claimed', 'running')))::int AS running,
|
|
225
|
+
(extract(epoch FROM clock_timestamp() - min(queued_at) FILTER (WHERE status = 'pending' AND (next_retry_at IS NULL OR next_retry_at <= clock_timestamp()))) * 1000)::bigint AS oldest_ms
|
|
226
|
+
FROM ${sql.raw(jobs)}
|
|
227
|
+
WHERE status IN ('pending', 'claimed', 'running')
|
|
228
|
+
GROUP BY job_type) p
|
|
229
|
+
WHERE (${maxPending}::int IS NOT NULL AND n > ${maxPending}::int)
|
|
230
|
+
OR (${maxAge}::bigint IS NOT NULL AND oldest_ms > ${maxAge}::bigint)
|
|
231
|
+
ORDER BY job_type`,
|
|
232
|
+
id: r => String(r['job_type']),
|
|
233
|
+
message: r => `${String(r['n'])} ${String(r['job_type'])} job(s) waiting (${String(r['running'])} running), the oldest for ${String(Number(r['oldest_ms']))} ms`,
|
|
234
|
+
subject: r => ({ entity: 'job', entityId: String(r['job_type']) }),
|
|
235
|
+
context: r => ({ ready: Number(r['n']), running: Number(r['running']), oldestReadyWaitMs: Number(r['oldest_ms']) }),
|
|
236
|
+
});
|
|
141
237
|
}
|
|
142
238
|
/** Raises `health:<name>` while a check reports unhealthy or throws; resolves when it is healthy again. Degraded is not a fault. */
|
|
143
239
|
export function healthSource(checks, options = {}) {
|
|
@@ -177,47 +273,36 @@ export function unitFaultSource(options) {
|
|
|
177
273
|
if (options.units !== undefined && options.units.length === 0) {
|
|
178
274
|
throw new Error('[pipework] alerts.source.unitFault units must not be empty; omit it to watch every unit.');
|
|
179
275
|
}
|
|
180
|
-
const severity = options.severity ?? 'error';
|
|
181
276
|
const units = options.units === undefined ? null : JSON.stringify(options.units);
|
|
182
|
-
|
|
277
|
+
const text = (v) => v === null || v === undefined ? null : String(v);
|
|
278
|
+
return querySource({
|
|
183
279
|
name: 'unit-fault',
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
count,
|
|
211
|
-
lastResult,
|
|
212
|
-
lastExitCode: text(r['last_exit_code']),
|
|
213
|
-
lastExitStatus: text(r['last_exit_status']),
|
|
214
|
-
firstAt: new Date(r['first_at']).toISOString(),
|
|
215
|
-
lastAt: new Date(r['last_at']).toISOString(),
|
|
216
|
-
},
|
|
217
|
-
};
|
|
218
|
-
});
|
|
219
|
-
},
|
|
220
|
-
};
|
|
280
|
+
severity: options.severity ?? 'error',
|
|
281
|
+
...(options.database !== undefined ? { database: options.database } : {}),
|
|
282
|
+
...ownerFields(options),
|
|
283
|
+
query: sql `
|
|
284
|
+
SELECT unit, count(*)::int AS n,
|
|
285
|
+
(array_agg(result ORDER BY at DESC))[1] AS last_result,
|
|
286
|
+
(array_agg(exit_code ORDER BY at DESC))[1] AS last_exit_code,
|
|
287
|
+
(array_agg(exit_status ORDER BY at DESC))[1] AS last_exit_status,
|
|
288
|
+
min(at) AS first_at, max(at) AS last_at,
|
|
289
|
+
ceil(extract(epoch FROM clock_timestamp() - min(at)) / 60)::int AS minutes
|
|
290
|
+
FROM pipework_unit_faults
|
|
291
|
+
WHERE at > clock_timestamp() - ${options.window} * interval '1 millisecond'
|
|
292
|
+
AND (${units}::jsonb IS NULL OR unit IN (SELECT jsonb_array_elements_text(${units}::jsonb)))
|
|
293
|
+
GROUP BY unit ORDER BY unit`,
|
|
294
|
+
id: r => String(r['unit']),
|
|
295
|
+
message: r => `${String(r['unit'])}: ${String(r['last_result'])} x${String(Number(r['n']))} in ${String(Math.max(1, Number(r['minutes'])))} min`,
|
|
296
|
+
subject: r => ({ entity: 'unit', entityId: String(r['unit']) }),
|
|
297
|
+
context: r => ({
|
|
298
|
+
count: Number(r['n']),
|
|
299
|
+
lastResult: String(r['last_result']),
|
|
300
|
+
lastExitCode: text(r['last_exit_code']),
|
|
301
|
+
lastExitStatus: text(r['last_exit_status']),
|
|
302
|
+
firstAt: new Date(r['first_at']).toISOString(),
|
|
303
|
+
lastAt: new Date(r['last_at']).toISOString(),
|
|
304
|
+
}),
|
|
305
|
+
});
|
|
221
306
|
}
|
|
222
307
|
const pad2 = (n) => String(n).padStart(2, '0');
|
|
223
308
|
function untilText(reset, now) {
|
|
@@ -240,47 +325,47 @@ export function quotaExhaustedSource(options = {}) {
|
|
|
240
325
|
if (Array.isArray(keys) && keys.length === 0) {
|
|
241
326
|
throw new Error('[pipework] alerts.source.quotaExhausted keys must not be empty; omit it to watch every key.');
|
|
242
327
|
}
|
|
243
|
-
const severity = options.severity ?? 'error';
|
|
244
328
|
const keyFilter = Array.isArray(keys)
|
|
245
329
|
? sql `AND key IN (SELECT jsonb_array_elements_text(${JSON.stringify([...new Set(keys)])}::jsonb))`
|
|
246
330
|
: sql ``;
|
|
247
|
-
|
|
331
|
+
const base = querySource({
|
|
248
332
|
name: 'quota-exhausted',
|
|
249
|
-
|
|
333
|
+
severity: options.severity ?? 'error',
|
|
334
|
+
...(options.database !== undefined ? { database: options.database } : {}),
|
|
335
|
+
...ownerFields(options),
|
|
336
|
+
query: sql `
|
|
337
|
+
SELECT key, remaining, "limit", reset_at,
|
|
338
|
+
(remaining > ${floor} AND refused_at IS NOT NULL AND refused_at >= updated_at) AS refused_only,
|
|
339
|
+
(refused_at IS NOT NULL AND refused_at >= updated_at) AS refused
|
|
340
|
+
FROM outbound_quota
|
|
341
|
+
WHERE reset_at > now() ${keyFilter}
|
|
342
|
+
AND (remaining <= ${floor} OR (refused_at IS NOT NULL AND refused_at >= updated_at))
|
|
343
|
+
ORDER BY key`,
|
|
344
|
+
id: r => String(r['key']),
|
|
345
|
+
message: r => {
|
|
346
|
+
const remaining = Number(r['remaining']);
|
|
347
|
+
const limit = r['limit'] === null ? null : Number(r['limit']);
|
|
348
|
+
const head = limit === null ? `${String(r['key'])} ${String(remaining)} remaining` : `${String(r['key'])} ${String(remaining)}/${String(limit)}`;
|
|
349
|
+
return `${head} until ${untilText(new Date(r['reset_at']), new Date())}${r['refused_only'] === true ? '; a call was refused' : ''}`;
|
|
350
|
+
},
|
|
351
|
+
subject: r => ({ entity: 'quota', entityId: String(r['key']) }),
|
|
352
|
+
context: r => ({
|
|
353
|
+
key: String(r['key']),
|
|
354
|
+
remaining: Number(r['remaining']),
|
|
355
|
+
limit: r['limit'] === null ? null : Number(r['limit']),
|
|
356
|
+
resetAt: new Date(r['reset_at']).toISOString(),
|
|
357
|
+
refused: r['refused'] === true,
|
|
358
|
+
}),
|
|
359
|
+
});
|
|
360
|
+
if (!(keys instanceof RegExp))
|
|
361
|
+
return base;
|
|
362
|
+
return {
|
|
363
|
+
...base,
|
|
250
364
|
async evaluate() {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
FROM outbound_quota
|
|
256
|
-
WHERE reset_at > now() ${keyFilter}
|
|
257
|
-
AND (remaining <= ${floor} OR (refused_at IS NOT NULL AND refused_at >= updated_at))
|
|
258
|
-
ORDER BY key`);
|
|
259
|
-
const now = new Date();
|
|
260
|
-
const out = [];
|
|
261
|
-
for (const r of rows) {
|
|
262
|
-
const key = String(r['key']);
|
|
263
|
-
if (keys instanceof RegExp) {
|
|
264
|
-
keys.lastIndex = 0;
|
|
265
|
-
if (!keys.test(key))
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
const remaining = Number(r['remaining']);
|
|
269
|
-
const limit = r['limit'] === null ? null : Number(r['limit']);
|
|
270
|
-
const resetAt = new Date(r['reset_at']);
|
|
271
|
-
const refusedOnly = r['refused_only'] === true;
|
|
272
|
-
const head = limit === null ? `${key} ${String(remaining)} remaining` : `${key} ${String(remaining)}/${String(limit)}`;
|
|
273
|
-
out.push({
|
|
274
|
-
key: `quota-exhausted:${key}`,
|
|
275
|
-
severity,
|
|
276
|
-
message: `${head} until ${untilText(resetAt, now)}${refusedOnly ? '; a call was refused' : ''}`,
|
|
277
|
-
subject: { entity: 'quota', entityId: key },
|
|
278
|
-
...(options.owner !== undefined ? { owner: options.owner } : {}),
|
|
279
|
-
...(options.runbook !== undefined ? { runbook: options.runbook } : {}),
|
|
280
|
-
context: { key, remaining, limit, resetAt: resetAt.toISOString(), refused: r['refused'] === true },
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
return out;
|
|
365
|
+
return (await base.evaluate()).filter(c => {
|
|
366
|
+
keys.lastIndex = 0;
|
|
367
|
+
return keys.test(c.key.slice('quota-exhausted:'.length));
|
|
368
|
+
});
|
|
284
369
|
},
|
|
285
370
|
};
|
|
286
371
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/infra/alerts/sources.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/infra/alerts/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAKrF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AA8B3D,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAW;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,sDAAsD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAA6C;IAChE,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvE,CAAA;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAA6B;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACtD,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,KAAK,CAAC,QAAQ;YACZ,MAAM,GAAG,GAAqB,EAAE,CAAA;YAChC,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC5D,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC;AAaD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,CAAA;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;IAC5C,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACnC,KAAK,CAAC,QAAQ;YACZ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACtE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAkB,EAAE;gBACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpC,OAAO;oBACL,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChC,QAAQ;oBACR,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC3B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,WAAW,CAAC,OAAO,CAAC;oBACvB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AA0BD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAA;IAC3C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,gGAAgG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACtI,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;IAC7D,MAAM,EAAE,GAAG,KAAK,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,EAAE,CAAA;IAClE,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;IAChJ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC1H,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAA;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAA;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;IAC5C,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,CAAA;IACjC,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,CAAC,QAAQ;YACZ,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YACvC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;kBAEtB,QAAQ,yBAAyB,QAAQ;qDACN,CAAC,CAAA;YAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAA;YAC/B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;kDAEW,QAAQ;0DACA,QAAQ;;oBAE9C,KAAK,wCAAwC,KAAK;iBACrD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;kBACb,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,KAAK;;;oCAGjD,KAAK;iBACxB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;kBACb,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,KAAK;wBAC7D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;;;;;oCAKC,QAAQ;gGACoD,CAAC,CAAA;YAC3F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAkB,EAAE;gBACzC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAQ,CAAA;gBACvF,MAAM,CAAC,GAAiB,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;gBACnI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACpC,OAAO;oBACL,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;oBACvB,QAAQ;oBACR,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC3B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,WAAW,CAAC,OAAO,CAAC;oBACvB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,MAAM,IAAI,GAAG,KAAK,IAAI,eAAe,CAAA;IACrC,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAwK,EAAE;IACzM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAA;IAC/F,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAU,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,wDAAwD,CAAC,CAAA;QACrH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,iBAAiB,CAAA;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;IACxG,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI;QACnC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;IACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA,uDAAuD,QAAQ,WAAW;QAChH,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAA,2DAA2D,QAAQ,WAAW;YACvG,CAAC,CAAC,GAAG,CAAA,EAAE,CAAA;IACT,MAAM,SAAS,GAAG,CAAC,CAAe,EAAiB,EAAE;QACnD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACvC,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAE,OAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACzG,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3E,CAAC,CAAA;IACD,OAAO,aAAa,CAAC;QACnB,IAAI;QACJ,QAAQ;QACR,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,GAAG,CAAA,4BAA4B,UAAU,EAAE;QAClD,OAAO,EAAE,UAAU;QACnB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,uBAAuB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjI,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC,CAAA;AACJ,CAAC;AAED,0IAA0I;AAC1I,MAAM,UAAU,iBAAiB,CAAC,OAAwE;IACxG,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAA;IACrE,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;QACvC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,KAAK,EAAE,GAAG,CAAA;;aAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;;+CAEqB,OAAO,CAAC,WAAW;0CACxB;QACtC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,iCAAiC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;QAC/J,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAmI;IAC/J,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAA;IAC/F,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAA;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAA;IAC7C,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;QACvC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,KAAK,EAAE,GAAG,CAAA;;;;;;eAMC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;;;eAGb,UAAU,6BAA6B,UAAU;eACjD,MAAM,wCAAwC,MAAM;wBAC3C;QACpB,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,oBAAoB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,6BAA6B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK;QAChK,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;KACpH,CAAC,CAAA;AACJ,CAAC;AAED,oIAAoI;AACpI,MAAM,UAAU,YAAY,CAAC,MAA8B,EAAE,UAAwC,EAAE;IACrG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACzD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,KAAK,CAAC,QAAQ;YACZ,MAAM,KAAK,GAAqB,EAAE,CAAA;YAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,OAAO,GAAkB,IAAI,CAAA;gBACjC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;oBAClC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;wBAAE,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,gBAAgB,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;gBACvI,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;gBAC5F,CAAC;gBACD,IAAI,OAAO,KAAK,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YAC3I,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAqI;IACnK,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAA;IAC7G,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAA;IAC7G,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChF,MAAM,IAAI,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5F,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;QACrC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,KAAK,EAAE,GAAG,CAAA;;;;;;;;uCAQyB,OAAO,CAAC,MAAM;eACtC,KAAK,gEAAgE,KAAK;kCACvD;QAC9B,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;QAChJ,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACpC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACvC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC3C,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAkB,CAAC,CAAC,WAAW,EAAE;YAC/D,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAkB,CAAC,CAAC,WAAW,EAAE;SAC9D,CAAC;KACH,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAE9D,SAAS,SAAS,CAAC,KAAW,EAAE,GAAS;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,CAAA;IAC3E,OAAO,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAgJ,EAAE;IACrL,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAA;IAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qFAAqF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxH,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAA;IAChH,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,GAAG,CAAA,gDAAgD,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAyB,CAAC,CAAC,CAAC,WAAW;QACvH,CAAC,CAAC,GAAG,CAAA,EAAE,CAAA;IACT,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;QACrC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,KAAK,EAAE,GAAG,CAAA;;4BAEc,KAAK;;;+BAGF,SAAS;4BACZ,KAAK;mBACd;QACf,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,EAAE;YACX,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;YACxC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;YAC7D,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;YAChJ,OAAO,GAAG,IAAI,UAAU,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAkB,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACtJ,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACrB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACjC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAkB,CAAC,CAAC,WAAW,EAAE;YAC/D,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI;SAC/B,CAAC;KACH,CAAC,CAAA;IACF,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1C,OAAO;QACL,GAAG,IAAI;QACP,KAAK,CAAC,QAAQ;YACZ,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;gBAClB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAqK,EAAE;IACvM,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAA;IAC5C,MAAM,OAAO,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9D,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;QAC5C,KAAK,CAAC,QAAQ;YACZ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;YAClF,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClH,GAAG,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE;gBAC7B,QAAQ;gBACR,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC7C,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;aACtJ,CAAC,CAAC,CAAA;QACL,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,UAA8H,EAAE;IACxJ,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,CAAC,KAAK;YACT,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,EAAE,EAAE,QAAQ,CAAA;YAC3D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAA;YAC5H,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAA;YACtE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;YAC5E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAA;YAClG,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE;gBAC7B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,CAAC,CAAA;YACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;YACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QAC/E,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AlertSeverity } from './handle.js';
|
|
2
|
+
import { type AlertSource } from './sources.js';
|
|
3
|
+
interface Basics {
|
|
4
|
+
owner?: string;
|
|
5
|
+
runbook?: string;
|
|
6
|
+
severity?: AlertSeverity;
|
|
7
|
+
database?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Raises `delivery-failed:<table>:<sink>` for outbox rows that gave up (`failed_at`) since the last tick, and
|
|
11
|
+
* `delivery-stuck:<table>:<sink>` while rows are still pending more than `stuckAfterMs` (default 15 min) past
|
|
12
|
+
* `next_attempt_at`. `tables` defaults to `['pipework_alert_deliveries']`; name `support_event_delivery` to add the support outbox.
|
|
13
|
+
* The failed condition clears by the handle's quiet period; the stuck one resolves when the rows drain.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deliveryFailedSource(options?: Basics & {
|
|
16
|
+
tables?: readonly string[];
|
|
17
|
+
stuckAfterMs?: number;
|
|
18
|
+
settleMs?: number;
|
|
19
|
+
}): AlertSource;
|
|
20
|
+
/**
|
|
21
|
+
* Raises `webhook-failed:<endpointId>` for outbound webhook deliveries that gave up (completed with no 2xx status)
|
|
22
|
+
* since the last tick, and `webhook-stalled:<endpointId>` while deliveries are more than `stalledAfterMs`
|
|
23
|
+
* (default 15 min) past their `next_retry_at`. `table` is the delivery table (default the outbound webhook's).
|
|
24
|
+
*/
|
|
25
|
+
export declare function webhookFailedSource(options?: Basics & {
|
|
26
|
+
table?: string;
|
|
27
|
+
stalledAfterMs?: number;
|
|
28
|
+
settleMs?: number;
|
|
29
|
+
}): AlertSource;
|
|
30
|
+
/**
|
|
31
|
+
* Raises `credit-overdraft:<tenantId>` for settlements that overdrew a tenant since the last tick,
|
|
32
|
+
* `credit-held:<tenantId>` while a reservation has been held longer than `heldOlderThanMs` (default 1 h), and
|
|
33
|
+
* `credit-expiry-undrained:all` while grants expired more than `expiryGraceMs` (default 1 h) ago still have credit left,
|
|
34
|
+
* which means nothing is running the credits expiry job.
|
|
35
|
+
*/
|
|
36
|
+
export declare function creditsSource(options?: Basics & {
|
|
37
|
+
heldOlderThanMs?: number;
|
|
38
|
+
expiryGraceMs?: number;
|
|
39
|
+
settleMs?: number;
|
|
40
|
+
}): AlertSource;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=subsystem-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subsystem-sources.d.ts","sourceRoot":"","sources":["../../../src/infra/alerts/subsystem-sources.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAA8C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE3F,UAAU,MAAM;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAuBlG;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAkCjJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAM,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CA+BtI;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAM,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAyCzI"}
|