pipework 0.275.0 → 0.277.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 +8 -0
- package/REFERENCE.md +11 -4
- package/dist/async/jobs/run-script.d.ts.map +1 -1
- package/dist/async/jobs/run-script.js +3 -0
- package/dist/async/jobs/run-script.js.map +1 -1
- package/dist/core/lifecycle/startup.d.ts.map +1 -1
- package/dist/core/lifecycle/startup.js +2 -0
- package/dist/core/lifecycle/startup.js.map +1 -1
- package/dist/data/db/pool.d.ts +6 -0
- package/dist/data/db/pool.d.ts.map +1 -1
- package/dist/data/db/pool.js +23 -0
- package/dist/data/db/pool.js.map +1 -1
- package/dist/data/migrate/internal-definitions.d.ts.map +1 -1
- package/dist/data/migrate/internal-definitions.js +2 -1
- package/dist/data/migrate/internal-definitions.js.map +1 -1
- package/dist/infra/alerts/handle.d.ts +10 -0
- package/dist/infra/alerts/handle.d.ts.map +1 -1
- package/dist/infra/alerts/handle.js +34 -3
- package/dist/infra/alerts/handle.js.map +1 -1
- package/dist/infra/alerts/release.d.ts +6 -0
- package/dist/infra/alerts/release.d.ts.map +1 -0
- package/dist/infra/alerts/release.js +25 -0
- package/dist/infra/alerts/release.js.map +1 -0
- package/dist/infra/alerts/schema.d.ts +22 -0
- package/dist/infra/alerts/schema.d.ts.map +1 -1
- package/dist/infra/alerts/schema.js +7 -0
- package/dist/infra/alerts/schema.js.map +1 -1
- package/dist/infra/credits/schema.d.ts +1 -1
- package/dist/request/context/run-in-transaction.d.ts.map +1 -1
- package/dist/request/context/run-in-transaction.js +28 -15
- package/dist/request/context/run-in-transaction.js.map +1 -1
- package/dist/request/http/aborted.d.ts +7 -0
- package/dist/request/http/aborted.d.ts.map +1 -1
- package/dist/request/http/aborted.js +20 -0
- package/dist/request/http/aborted.js.map +1 -1
- package/dist/request/http/namespace.d.ts +1 -1
- package/dist/request/http/namespace.d.ts.map +1 -1
- package/dist/request/http/namespace.js +1 -1
- package/dist/request/http/namespace.js.map +1 -1
- package/dist/request/http/server.d.ts.map +1 -1
- package/dist/request/http/server.js +38 -9
- package/dist/request/http/server.js.map +1 -1
- package/dist/test/plugin.d.ts.map +1 -1
- package/dist/test/plugin.js +1 -0
- package/dist/test/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/async/jobs/run-script.ts +2 -0
- package/src/core/lifecycle/startup.ts +2 -0
- package/src/data/db/pool.ts +29 -0
- package/src/data/migrate/internal-definitions.ts +2 -1
- package/src/infra/alerts/handle.ts +43 -3
- package/src/infra/alerts/release.ts +28 -0
- package/src/infra/alerts/schema.ts +8 -0
- package/src/request/context/run-in-transaction.ts +26 -17
- package/src/request/http/aborted.ts +19 -0
- package/src/request/http/namespace.ts +1 -1
- package/src/request/http/server.ts +37 -9
- package/src/test/plugin.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.277.0
|
|
4
|
+
|
|
5
|
+
- **Added: `resendOnNewRelease` on alerts** (#959). On `alerts.create` and per `raise` (default `false`): an open, unacknowledged alert is sent again the first time it is raised by a release first seen later than the release it was last sent from, once per release, in the same atomic statement as `resendAfterMs` (either may send). Releases are detected: each process records its `release` once in the new `pipework_alert_releases` table, so a rollback or two releases live at once never re-send. No configured release: no effect. Each process records its release when the manifold starts or a script runs (blueprint `alerts` set; a failure only logs a warning), with a tick and a raise as fallbacks. The last-sent release only moves to a later-first-seen release. **Migration:** generate a migration to add `pipework_alert_releases` and the `resend_on_new_release` and `last_sent_release` columns on `pipework_alerts`.
|
|
6
|
+
|
|
7
|
+
## 0.276.0
|
|
8
|
+
|
|
9
|
+
- **Fixed: an aborted request always settles, and a real failure after a disconnect is not silent** (#956). A request whose signal aborted (a client disconnect, or `inject({ signal })`) is never answered: the server destroys the raw response whether the handler threw or completed afterwards, so an injected call rejects with `AbortError` instead of never settling or resolving with the real status. Only errors the abort caused (the signal's reason, `RequestAbortedError`, `AbortError`, Postgres `57014`/`25P02`, anywhere in the `cause` chain) are a client abort; any other error after the abort goes through the normal classification and `onInternalError`, with nothing sent. The `pg_cancel_backend` sent on abort is sent over a connection reserved for cancels and awaited before the transaction's connection returns to the pool, so it cannot cancel another request's statement and never waits on a full pool. `cancelOnDisconnect: false` routes are unchanged.
|
|
10
|
+
|
|
3
11
|
## 0.275.0
|
|
4
12
|
|
|
5
13
|
- **Added: `pipework lint --settings-digest`** (#952). Prints one sha256 per module (`<path> <digest>`, the root pass as `.`; `--format json` adds the hashed `inputs`) of what decides lint there: pipework, eslint and @typescript-eslint versions, the include globs, and the distinct configs eslint resolves for the module's covered files (rules, language options, settings, after `lint.extra` and `lint.modules`); where pipework's preset runs, also its ignores and config blocks. A module with its own `eslint.config.*` is digested from that config. It changes when coverage or rules change (including the first file in a differently configured region) and not for an edit to any other part of `pipework.config.ts` or a file joining an existing region, so a lint-result cache can key on it. It does not cover tsconfig contents. Nothing is linted.
|
package/REFERENCE.md
CHANGED
|
@@ -1939,16 +1939,18 @@ Opt in with blueprint `alerts: {}`. The generated migration then includes three
|
|
|
1939
1939
|
- `pipework_alerts` — one row per key: `status` (`open | resolved`), `severity`, `message`, `subject` jsonb, `count`, `first_seen_at`, `last_seen_at`, `last_sent_at`, `resolved_at`, `trace_ids` (latest 10, newest first).
|
|
1940
1940
|
- `pipework_alert_deliveries` — the outbox, one row per event and sink: `kind` (`raise | repeat | resolve`), `sink`, `payload`, `attempts`, `next_attempt_at`, `delivered_at`, `failed_at`, `last_error`.
|
|
1941
1941
|
- `pipework_alert_source_state` — the position a built-in source has reached.
|
|
1942
|
+
- `pipework_alert_releases` — one row per release seen (`release`, `first_seen_at`); `resendOnNewRelease` compares them.
|
|
1942
1943
|
|
|
1943
1944
|
### `alerts.create`
|
|
1944
1945
|
|
|
1945
|
-
`alerts.create({ sinks, queue, jobType?, resendAfterMs?, resolveAfterQuietMs?, maxAttempts?, backoffMs?, sources?, database?, redact? })` returns a handle.
|
|
1946
|
+
`alerts.create({ sinks, queue, jobType?, resendAfterMs?, resendOnNewRelease?, resolveAfterQuietMs?, maxAttempts?, backoffMs?, sources?, database?, redact? })` returns a handle.
|
|
1946
1947
|
|
|
1947
1948
|
Email addresses in an alert's message and in the strings of its context become `[email]` before it is stored, recorded or sent; add patterns with `redact` (`RegExp[]`, each match becomes `[redacted]`). A job's own `error_payload` is not changed.
|
|
1948
1949
|
|
|
1949
1950
|
- `sinks` — at least one, names unique. `alerts.webhook({ url, secret, name?, timeoutMs? })` POSTs the alert as JSON with `X-Webhook-Id`, `X-Webhook-Timestamp` and `X-Webhook-Signature`, signed like `webhook.sign` and checkable with `webhook.verify.hmac`; a non-2xx answer fails the attempt. `alerts.memory({ name? })` keeps deliveries in `.delivered` (and `.clear()`) for tests. A custom sink is `{ name, send(delivery) }`; throwing, or taking over 10 s, fails the attempt.
|
|
1950
1951
|
- `queue` — the app's queue; sending an alert enqueues the alerts job as a child of the raising trace.
|
|
1951
1952
|
- `jobType` — default `'pipework.alerts'`. `resendAfterMs` — default `null`: an open alert is never re-sent. `resolveAfterQuietMs` — default `null`: only an explicit `resolve` closes it. Both can be set per raise.
|
|
1953
|
+
- `resendOnNewRelease` — default `false`. An open, unacknowledged alert is sent again (a `repeat` delivery, status `'resent'`) the first time it is raised by a release first seen later than the release it was last sent from: once per release, with no `(key, release)` table of your own. The release is the app's `release` (`release.env`); each process records it in `pipework_alert_releases` with the time it was first seen, so a rollback to an older release, or two releases live at once (canary and stable), never re-send. With no release configured the option has no effect. Independent of `resendAfterMs`: either may send. An acknowledged alert never sends; a resolved one reopens as usual, and the reopening release becomes the last sent. Can be set per raise. The release is recorded automatically when the manifold starts (`start()`) or a script runs, if blueprint `alerts` is set (a failure only logs a warning), and again by a tick or a raise if that did not happen, so an older release that is still running and has not raised is not mistaken for a newer one. A later send for another reason (`resendAfterMs`) never moves the last-sent release back to an older one. Existing alerts with no recorded release send once on their next raise from a release.
|
|
1952
1954
|
- `maxAttempts` (default 10) and `backoffMs` (default 5000, doubling per attempt, capped at one hour) govern retries; a row that reaches `maxAttempts`, or names a sink no longer configured, is marked `failed_at` and logged at error.
|
|
1953
1955
|
- `sources` — built-in conditions evaluated on every tick (below). `database` — default the default database.
|
|
1954
1956
|
|
|
@@ -1956,7 +1958,7 @@ Every write goes through `pipe.system()`, outside the request's transaction, so
|
|
|
1956
1958
|
|
|
1957
1959
|
### Methods
|
|
1958
1960
|
|
|
1959
|
-
- `raise(key, { severity, message, subject?, resendAfterMs?, resolveAfterQuietMs? })` — `severity` is `info | warning | error | critical`; `subject` is `{ tenantId?, entity?, entityId? }`. Returns `{ status }`: `'opened'` (new, or reopened after a resolve: count restarts at 1, one `raise` delivery), `'grouped'` (already open: count, last seen, latest message and trace id updated, nothing sent), or `'resent'` (open, `resendAfterMs` passed since the last send: one `repeat` delivery carrying the count). One atomic statement decides it, so 20 processes raising one new key open it once and send once.
|
|
1961
|
+
- `raise(key, { severity, message, subject?, resendAfterMs?, resendOnNewRelease?, resolveAfterQuietMs? })` — `severity` is `info | warning | error | critical`; `subject` is `{ tenantId?, entity?, entityId? }`. Returns `{ status }`: `'opened'` (new, or reopened after a resolve: count restarts at 1, one `raise` delivery), `'grouped'` (already open: count, last seen, latest message and trace id updated, nothing sent), or `'resent'` (open, `resendAfterMs` passed since the last send or `resendOnNewRelease` and a newer release: one `repeat` delivery carrying the count). One atomic statement decides it, so 20 processes raising one new key open it once and send once.
|
|
1960
1962
|
- `resolve(key)` — `true` and one `resolve` delivery if the alert was open; `false` and nothing otherwise.
|
|
1961
1963
|
- `job` — the handler for `jobType`. Add it to the worker's `jobs` and schedule it (every minute with `schedules: [{ job: 'pipework.alerts', cron: '* * * * *' }]`). Each run resolves alerts quiet for their period, evaluates the sources, and sends due deliveries. The schedule is also the safety net: deliveries left by a crash are sent by the next run on any process. Two runs at once send each delivery once, and the deliveries of one alert to one sink go in order.
|
|
1962
1964
|
- `tick()` — what one run does, for tests. Returns `{ resolved, delivered, retried, failed }`.
|
|
@@ -2270,7 +2272,12 @@ checkpoint is cancelled the same way). The request's Flow carries
|
|
|
2270
2272
|
it to the handler's own outbound calls (`fetch(url, { signal })`, a
|
|
2271
2273
|
`quota.call` send). The aborted request is not an internal error:
|
|
2272
2274
|
`onInternalError` is not called, nothing is sent (the socket is gone), and it
|
|
2273
|
-
logs once at info (`request aborted by client`)
|
|
2275
|
+
logs once at info (`request aborted by client`) when the handler threw what the
|
|
2276
|
+
abort caused (the signal's reason, a `RequestAbortedError` or `AbortError`, a
|
|
2277
|
+
cancelled statement, `57014`/`25P02`, anywhere in the `cause` chain) or
|
|
2278
|
+
completed after it. Any other error after the abort is a real failure: it is
|
|
2279
|
+
classified and reported as usual (error step, `req.log.error` for 5xx,
|
|
2280
|
+
`onInternalError`), but still nothing is sent. A request whose handler
|
|
2274
2281
|
finished before the close is unaffected. `transactionTimeoutMs` bounds only
|
|
2275
2282
|
opening the transactions (multi-database setup), not the handler or its
|
|
2276
2283
|
statements.
|
|
@@ -2281,7 +2288,7 @@ never aborts, the handler runs to completion and the transaction commits after t
|
|
|
2281
2288
|
socket has closed. Use it for a webhook receiver whose sender abandons slow
|
|
2282
2289
|
deliveries and does not redeliver.
|
|
2283
2290
|
|
|
2284
|
-
In a test, `inject({ signal })` aborted while the handler runs is a client disconnect: the request's signal aborts with `RequestAbortedError`, the transaction rolls back, and a `cancelOnDisconnect: false` route runs on and commits.
|
|
2291
|
+
In a test, `inject({ signal })` aborted while the handler runs is a client disconnect: the request's signal aborts with `RequestAbortedError`, the transaction rolls back, and a `cancelOnDisconnect: false` route runs on and commits. An aborted request is never answered, whether the handler throws or completes after the abort: the `inject` promise rejects with an `AbortError`, as a client that hung up never gets a response.
|
|
2285
2292
|
|
|
2286
2293
|
### Types
|
|
2287
2294
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-script.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/run-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"run-script.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/run-script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAatD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iGAAiG;IACjG,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;QAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;CACxE;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAkCZ"}
|
|
@@ -5,6 +5,7 @@ import { isTracingEnabled } from '../../trace/entry/tracing-enabled.js';
|
|
|
5
5
|
import { openTrace } from '../../trace/entry/open-trace.js';
|
|
6
6
|
import { parentTraceRef } from '../../trace/entry/parent-trace.js';
|
|
7
7
|
import { closeTrace } from '../../trace/entry/close-trace.js';
|
|
8
|
+
import { recordAlertReleaseAtStart } from '../../infra/alerts/release.js';
|
|
8
9
|
import { stageProcessStart } from '../../trace/entry/process-start.js';
|
|
9
10
|
const SCRIPT_TRANSACTION_TIMEOUT_MS = 5000;
|
|
10
11
|
/**
|
|
@@ -17,6 +18,8 @@ const SCRIPT_TRANSACTION_TIMEOUT_MS = 5000;
|
|
|
17
18
|
* The trace close is awaited, so the row is written before the caller closes the pool.
|
|
18
19
|
*/
|
|
19
20
|
export async function runScript(instance, fn, options = {}) {
|
|
21
|
+
if (options.process?.phase === 'script')
|
|
22
|
+
await recordAlertReleaseAtStart(instance);
|
|
20
23
|
const tenant = options.tenant ?? null;
|
|
21
24
|
const auth = options.auth ?? null;
|
|
22
25
|
const jobType = options.jobType ?? 'script';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-script.js","sourceRoot":"","sources":["../../../src/async/jobs/run-script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAEtE,MAAM,6BAA6B,GAAG,IAAI,CAAA;AAU1C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAkB,EAClB,EAAwB,EACxB,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAA;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAA;IAC3C,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,SAAS,CAAC;YACV,QAAQ;YACR,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,cAAc,EAAE;YACxB,MAAM;YACN,IAAI;YACJ,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,CAAC,CAAC,IAAI,CAAA;IACR,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACpD,iBAAiB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACvG,MAAM,GAAG,GAAG,KAAK,IAAgB,EAAE,CAAC,EAAE,EAAE,CAAA;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI;YAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAC9B,CAAC,CAAC,MAAM,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAA;QACxF,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC3C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAC1C,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"run-script.js","sourceRoot":"","sources":["../../../src/async/jobs/run-script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAEtE,MAAM,6BAA6B,GAAG,IAAI,CAAA;AAU1C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAkB,EAClB,EAAwB,EACxB,UAA4B,EAAE;IAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,QAAQ;QAAE,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAClF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAA;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAA;IAC3C,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,SAAS,CAAC;YACV,QAAQ;YACR,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,cAAc,EAAE;YACxB,MAAM;YACN,IAAI;YACJ,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,CAAC,CAAC,IAAI,CAAA;IACR,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACpD,iBAAiB,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACvG,MAAM,GAAG,GAAG,KAAK,IAAgB,EAAE,CAAC,EAAE,EAAE,CAAA;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI;YAC5B,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;YAC9B,CAAC,CAAC,MAAM,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAA;QACxF,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC3C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAC1C,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/startup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/lifecycle/startup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAS7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiExG"}
|
|
@@ -3,6 +3,7 @@ import { sql } from '../../data/db/sql.js';
|
|
|
3
3
|
import { getBaseLogger } from '../logging/index.js';
|
|
4
4
|
import { runScript } from '../../async/jobs/run-script.js';
|
|
5
5
|
import { getContext } from '../../request/context/store.js';
|
|
6
|
+
import { recordAlertReleaseAtStart } from '../../infra/alerts/release.js';
|
|
6
7
|
import { TRACE_PARTITION_HOOK_NAME } from '../../trace/partition/startup-hook.js';
|
|
7
8
|
import { projectStepError } from '../../trace/runtime/step-error.js';
|
|
8
9
|
import { serializeForTrace } from '../../trace/capture/bounded-serializer.js';
|
|
@@ -11,6 +12,7 @@ export async function orchestrateStartup(instance, options = {}) {
|
|
|
11
12
|
const timeoutMs = options.timeoutMs ?? 30000;
|
|
12
13
|
const doStartupWork = async () => {
|
|
13
14
|
await verifyDatabases(instance, logger);
|
|
15
|
+
await recordAlertReleaseAtStart(instance);
|
|
14
16
|
if (options.hooks) {
|
|
15
17
|
// The partition hook creates today's trace partition, so it runs first and outside the trace.
|
|
16
18
|
const partition = options.hooks.filter(h => h.name === TRACE_PARTITION_HOOK_NAME);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/lifecycle/startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAO7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAkB,EAAE,UAA0B,EAAE;IACvF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAE5C,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/lifecycle/startup.ts"],"names":[],"mappings":"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"}
|
package/dist/data/db/pool.d.ts
CHANGED
|
@@ -39,6 +39,12 @@ export interface ManagedConnection {
|
|
|
39
39
|
connectionId: number;
|
|
40
40
|
backendPid: number;
|
|
41
41
|
}>>;
|
|
42
|
+
/**
|
|
43
|
+
* Cancels the statement running on server backend `pid` (`pg_cancel_backend`),
|
|
44
|
+
* over a connection reserved for cancels (opened on first use, closed with
|
|
45
|
+
* this connection) so it never waits on the pool the statement runs in.
|
|
46
|
+
*/
|
|
47
|
+
cancelBackend?(pid: number): Promise<void>;
|
|
42
48
|
close(options?: {
|
|
43
49
|
timeoutSeconds?: number;
|
|
44
50
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAOtE,wVAAwV;AACxV,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEvD,0HAA0H;AAC1H,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,yHAAyH;IACzH,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IACpC,mIAAmI;IACnI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAA;IACpD;;;;;;;;;;;;;;OAcG;IACH,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IACrF,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5D;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAOtE,wVAAwV;AACxV,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEvD,0HAA0H;AAC1H,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,yHAAyH;IACzH,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IACpC,mIAAmI;IACnI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAA;IACpD;;;;;;;;;;;;;;OAcG;IACH,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;IACrF;;;;OAIG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5D;AAmBD,mJAAmJ;AACnJ,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAA;CACxE;AAuDD;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAsB5E;AAED,6KAA6K;AAC7K,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,IAAI,EACnB,aAAa,CAAC,EAAE,qBAAqB,EACrC,eAAe,CAAC,EAAE,MAAM,GACvB,iBAAiB,CA4CnB"}
|
package/dist/data/db/pool.js
CHANGED
|
@@ -5,6 +5,23 @@ import { markObservedConnection } from '../query/postgres-js/driver-error-bounda
|
|
|
5
5
|
import { warnRawClientIsUnsanitized } from './raw-client-warning.js';
|
|
6
6
|
import { splitLargeInserts } from './insert-split.js';
|
|
7
7
|
import { createStatementWatch } from './query-watch.js';
|
|
8
|
+
/** A lazily opened single-connection client that only sends cancels. */
|
|
9
|
+
function createCanceller(url) {
|
|
10
|
+
let client;
|
|
11
|
+
let closed = false;
|
|
12
|
+
return {
|
|
13
|
+
async cancel(pid) {
|
|
14
|
+
if (closed)
|
|
15
|
+
return;
|
|
16
|
+
client ??= postgres(url, { max: 1, idle_timeout: 3, onnotice: () => { }, fetch_types: false });
|
|
17
|
+
await client `SELECT pg_cancel_backend(${pid})`;
|
|
18
|
+
},
|
|
19
|
+
async close() {
|
|
20
|
+
closed = true;
|
|
21
|
+
await client?.end({ timeout: 1 });
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
8
25
|
function startupSettings(settings) {
|
|
9
26
|
const out = {};
|
|
10
27
|
for (const [k, v] of Object.entries(settings))
|
|
@@ -66,12 +83,15 @@ export function tap(url, options) {
|
|
|
66
83
|
...(options?.settings !== undefined ? { connection: startupSettings(options.settings) } : {}),
|
|
67
84
|
});
|
|
68
85
|
const db = splitLargeInserts(drizzle(client));
|
|
86
|
+
const canceller = createCanceller(url);
|
|
69
87
|
return {
|
|
70
88
|
name: 'manual',
|
|
71
89
|
client,
|
|
72
90
|
drizzle: db,
|
|
73
91
|
connectionIds: () => probeConnectionIds(client, undefined),
|
|
92
|
+
cancelBackend: (pid) => canceller.cancel(pid),
|
|
74
93
|
async close(options) {
|
|
94
|
+
await canceller.close();
|
|
75
95
|
await client.end(endOptions(options));
|
|
76
96
|
},
|
|
77
97
|
};
|
|
@@ -103,6 +123,7 @@ export function createManagedConnection(config, onClose, observability, applicat
|
|
|
103
123
|
? createStatementWatch({ database: config.name, url: config.url, slowQueryMs: observability.slowQueryMs, inFlightQueryMs: observability.inFlightQueryMs })
|
|
104
124
|
: undefined;
|
|
105
125
|
const db = splitLargeInserts(drizzle(client, statementWatch ? { statementWatch: statementWatch.watch } : {}));
|
|
126
|
+
const canceller = createCanceller(config.url);
|
|
106
127
|
return {
|
|
107
128
|
name: config.name,
|
|
108
129
|
get client() {
|
|
@@ -112,8 +133,10 @@ export function createManagedConnection(config, onClose, observability, applicat
|
|
|
112
133
|
},
|
|
113
134
|
drizzle: db,
|
|
114
135
|
connectionIds: () => probeConnectionIds(client, slot),
|
|
136
|
+
cancelBackend: (pid) => canceller.cancel(pid),
|
|
115
137
|
async close(options) {
|
|
116
138
|
onClose();
|
|
139
|
+
await canceller.close();
|
|
117
140
|
await statementWatch?.close();
|
|
118
141
|
await client.end(endOptions(options));
|
|
119
142
|
},
|
package/dist/data/db/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,OAAO,EAA2B,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,OAAO,EAA2B,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AA8CvD,wEAAwE;AACxE,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,MAAgC,CAAA;IACpC,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,IAAI,MAAM;gBAAE,OAAM;YAClB,MAAM,KAAK,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAA;YAC7F,MAAM,MAAM,CAAA,4BAA4B,GAAG,GAAG,CAAA;QAChD,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,GAAG,IAAI,CAAA;YACb,MAAM,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QACnC,CAAC;KACF,CAAA;AACH,CAAC;AASD,SAAS,eAAe,CAAC,QAA6D;IACpF,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/G,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,WAAW,GAAG,gCAAgC,CAAA;AAKpD,KAAK,UAAU,kBAAkB,CAC/B,MAAoB,EACpB,IAA2B;IAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,oHAAoH;YACpH,wIAAwI,CACzI,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAA;IAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAA;QACvF,IAAI,MAAM;YAAE,MAAM,MAAM,CAAC,MAAM,CAAA;QAC/B,MAAM,GAAG,GAAwD,EAAE,CAAA;QACnE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,YAAgC,CAAA;YACpC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,GAAG,YAAY,KAAK,EAAE,CAAA,CAAC,CAAC,CAAA;YACtD,IAAI,IAA4B,CAAA;YAChC,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAyB,WAAW,CAAC,CAAA;YAC/D,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;YACrB,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;YACxB,IAAI,YAAY,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,uKAAuK,CAAC,CAAA;YAC1L,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7C,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAA;QACnD,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,gIAAgI,CAAC,CAAA;QACnJ,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,IAAI,IAAI,QAAQ;YAAE,IAAI,CAAC,OAAO,EAAE,CAAA;IAC7C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,OAAwB;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC3B,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9F,CAAC,CAAA;IAEF,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEtC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC;QAC1D,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C,KAAK,CAAC,KAAK,CAAC,OAAO;YACjB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YACvB,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QACvC,CAAC;KACF,CAAA;AACH,CAAC;AAED,6KAA6K;AAC7K,MAAM,UAAU,uBAAuB,CACrC,MAAwB,EACxB,OAAmB,EACnB,aAAqC,EACrC,eAAwB;IAExB,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,MAAM,IAAI,GAA0B,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7E,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI;QAC7B,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,WAAW;gBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YACnE,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAC1C,CAAC,CAAqB;QACxB,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QACpB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;QACrC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS;YACrE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAC9H,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,IAAI,cAAc,CAAC,aAAa,CAAC,CAAA;IACjF,IAAI,YAAY;QAAE,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAEhD,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC;QAC1J,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7G,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAE7C,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,MAAM;YACR,IAAI,YAAY;gBAAE,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACzD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;QACrD,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C,KAAK,CAAC,KAAK,CAAC,OAAO;YACjB,OAAO,EAAE,CAAA;YACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YACvB,MAAM,cAAc,EAAE,KAAK,EAAE,CAAA;YAC7B,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QACvC,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAAgD;IAClE,OAAO,OAAO,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAA;AACzF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-definitions.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/internal-definitions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"internal-definitions.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/internal-definitions.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmKlC"}
|
|
@@ -73,11 +73,12 @@ export async function loadInternalDefinitions(blueprint, options) {
|
|
|
73
73
|
result['__pipework_crawl_resource'] = crawlResources;
|
|
74
74
|
}
|
|
75
75
|
if (blueprint.alerts !== undefined) {
|
|
76
|
-
const { alerts, alertOccurrences, alertDeliveries, alertSourceState, unitFaults, loopBeats, faults } = await import('../../infra/alerts/schema.js');
|
|
76
|
+
const { alerts, alertOccurrences, alertDeliveries, alertSourceState, alertReleases, unitFaults, loopBeats, faults } = await import('../../infra/alerts/schema.js');
|
|
77
77
|
result['__pipework_alerts'] = alerts;
|
|
78
78
|
result['__pipework_alert_occurrences'] = alertOccurrences;
|
|
79
79
|
result['__pipework_alert_deliveries'] = alertDeliveries;
|
|
80
80
|
result['__pipework_alert_source_state'] = alertSourceState;
|
|
81
|
+
result['__pipework_alert_releases'] = alertReleases;
|
|
81
82
|
result['__pipework_unit_faults'] = unitFaults;
|
|
82
83
|
result['__pipework_loop_beats'] = loopBeats;
|
|
83
84
|
result['__pipework_faults'] = faults;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-definitions.js","sourceRoot":"","sources":["../../../src/data/migrate/internal-definitions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"internal-definitions.js","sourceRoot":"","sources":["../../../src/data/migrate/internal-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,14 @@ export interface AlertsConfig {
|
|
|
17
17
|
readonly jobType?: string;
|
|
18
18
|
/** Send again while an alert stays open and is raised again after this long since the last send. Default `null`: never. */
|
|
19
19
|
readonly resendAfterMs?: number | null;
|
|
20
|
+
/**
|
|
21
|
+
* Send an open, unacknowledged alert again the first time it is raised by a release first seen later than the
|
|
22
|
+
* release it was last sent from, once per release. Releases are detected, not configured: each process records its
|
|
23
|
+
* `release` (from `release.env`) with the time it was first seen. A rollback to an older release, or two releases
|
|
24
|
+
* live at once, never re-send. Without a configured release it has no effect. Independent of `resendAfterMs`:
|
|
25
|
+
* either may send. Default `false`; a raise can override it.
|
|
26
|
+
*/
|
|
27
|
+
readonly resendOnNewRelease?: boolean;
|
|
20
28
|
/** Resolve an open alert nobody raised for this long, on the job's tick. Default `null`: only `resolve`. */
|
|
21
29
|
readonly resolveAfterQuietMs?: number | null;
|
|
22
30
|
/** Delivery attempts before a row is given up on; default 10. A delivery given up raises `pipework.alerts.undeliverable:<sink>` through the other sinks. */
|
|
@@ -68,6 +76,8 @@ export interface RaiseOptions {
|
|
|
68
76
|
readonly context?: Readonly<Record<string, JsonValue>>;
|
|
69
77
|
/** Overrides the handle's `resendAfterMs` for this alert; `null`: this alert is never re-sent. */
|
|
70
78
|
readonly resendAfterMs?: number | null;
|
|
79
|
+
/** Overrides the handle's `resendOnNewRelease` for this alert. */
|
|
80
|
+
readonly resendOnNewRelease?: boolean;
|
|
71
81
|
/** Overrides the handle's `resolveAfterQuietMs` for this alert; `null`: only `resolve` closes it. */
|
|
72
82
|
readonly resolveAfterQuietMs?: number | null;
|
|
73
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/infra/alerts/handle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/infra/alerts/handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { getContext } from '../../request/context/store.js';
|
|
|
5
5
|
import { getBaseLogger } from '../../core/logging/index.js';
|
|
6
6
|
import { __flowStep } from '../../trace/runtime/flow-step.js';
|
|
7
7
|
import { auditAlert } from './audit.js';
|
|
8
|
+
import { insertAlertRelease } from './release.js';
|
|
8
9
|
import { ALERT_SEVERITIES, ALERT_STATUSES } from './schema.js';
|
|
9
10
|
import { encodeCursor, decodeCursor } from '../../request/fixture/paginate.js';
|
|
10
11
|
import { checkRetention, createOutbox, hourlySweep } from '../outbox/core.js';
|
|
@@ -147,6 +148,7 @@ export function createAlerts(config) {
|
|
|
147
148
|
const backoffMs = config.backoffMs ?? 5000;
|
|
148
149
|
const defaultResend = config.resendAfterMs ?? null;
|
|
149
150
|
const defaultQuiet = config.resolveAfterQuietMs ?? null;
|
|
151
|
+
const defaultOnRelease = config.resendOnNewRelease ?? false;
|
|
150
152
|
const sources = config.sources ?? [];
|
|
151
153
|
const database = config.database;
|
|
152
154
|
const redactExtra = config.redact ?? [];
|
|
@@ -164,6 +166,17 @@ export function createAlerts(config) {
|
|
|
164
166
|
throw new Error(`[pipework] alerts.raise: ${name} must be a non-negative integer or null, got ${String(value)}.`);
|
|
165
167
|
return value;
|
|
166
168
|
}
|
|
169
|
+
// Each release this process raises from is recorded once (first writer wins) before any resend decision reads it.
|
|
170
|
+
const recorded = new Map();
|
|
171
|
+
function recordRelease(release) {
|
|
172
|
+
let p = recorded.get(release);
|
|
173
|
+
if (p === undefined) {
|
|
174
|
+
p = insertAlertRelease(db(), release).then(() => undefined);
|
|
175
|
+
p.catch(() => recorded.delete(release));
|
|
176
|
+
recorded.set(release, p);
|
|
177
|
+
}
|
|
178
|
+
return p;
|
|
179
|
+
}
|
|
167
180
|
// The alert and its deliveries move in one statement, so a crash cannot leave one without the other.
|
|
168
181
|
const payloadSql = (kind, environment) => sql `jsonb_build_object(
|
|
169
182
|
'kind', ${kind}, 'key', up.key, 'severity', up.severity, 'message', up.message, 'subject', up.subject,
|
|
@@ -182,6 +195,10 @@ export function createAlerts(config) {
|
|
|
182
195
|
if (!SEVERITIES.has(options.severity))
|
|
183
196
|
throw new Error(`[pipework] alerts.raise: severity must be info, warning, error or critical, got "${String(options.severity)}".`);
|
|
184
197
|
const resendStored = storedMs('resendAfterMs', options.resendAfterMs);
|
|
198
|
+
const onReleaseStored = options.resendOnNewRelease ?? null;
|
|
199
|
+
const release = getContext()?.instance.config.release ?? null;
|
|
200
|
+
if (release !== null)
|
|
201
|
+
await recordRelease(release);
|
|
185
202
|
const quietStored = storedMs('resolveAfterQuietMs', options.resolveAfterQuietMs);
|
|
186
203
|
const traceId = getContext()?.trace?.id ?? null;
|
|
187
204
|
const traceArray = traceId === null ? '{}' : textArrayParam([traceId]);
|
|
@@ -195,16 +212,20 @@ export function createAlerts(config) {
|
|
|
195
212
|
const sendsSql = sql `(a.status <> 'acknowledged' AND (a.status = 'resolved' OR a.last_sent_at IS NULL
|
|
196
213
|
OR (NULLIF(COALESCE(EXCLUDED.resend_after_ms, a.resend_after_ms, ${defaultResend}::int), -1) IS NOT NULL
|
|
197
214
|
AND EXCLUDED.last_sent_at - a.last_sent_at
|
|
198
|
-
>= NULLIF(COALESCE(EXCLUDED.resend_after_ms, a.resend_after_ms, ${defaultResend}::int), -1) * interval '1 millisecond')
|
|
215
|
+
>= NULLIF(COALESCE(EXCLUDED.resend_after_ms, a.resend_after_ms, ${defaultResend}::int), -1) * interval '1 millisecond')
|
|
216
|
+
OR (${release}::text IS NOT NULL
|
|
217
|
+
AND COALESCE(EXCLUDED.resend_on_new_release, a.resend_on_new_release, ${defaultOnRelease}::boolean)
|
|
218
|
+
AND (SELECT r.first_seen_at FROM pipework_alert_releases r WHERE r."release" = ${release}::text)
|
|
219
|
+
> COALESCE((SELECT r.first_seen_at FROM pipework_alert_releases r WHERE r."release" = a.last_sent_release), '-infinity'::timestamptz))))`;
|
|
199
220
|
const kindSql = sql `CASE WHEN up.inserted THEN 'raise' WHEN up.reopened THEN 'reopen' ELSE 'repeat' END`;
|
|
200
221
|
const rows = await db().execute(sql `
|
|
201
222
|
WITH up AS (
|
|
202
223
|
INSERT INTO pipework_alerts AS a
|
|
203
224
|
(key, status, severity, message, subject, owner, runbook, context, count, first_seen_at, last_seen_at, last_sent_at,
|
|
204
|
-
trace_ids, resend_after_ms, resolve_after_quiet_ms, updated_at)
|
|
225
|
+
trace_ids, resend_after_ms, resend_on_new_release, last_sent_release, resolve_after_quiet_ms, updated_at)
|
|
205
226
|
SELECT ${key}, 'open', ${options.severity}, ${message}, ${subject}::jsonb,
|
|
206
227
|
${options.owner ?? null}::text, ${options.runbook ?? null}::text, ${context}::jsonb, 1, c.ts, c.ts, c.ts,
|
|
207
|
-
${traceArray}::text[], ${resendStored}::int, ${quietStored}::int, c.ts
|
|
228
|
+
${traceArray}::text[], ${resendStored}::int, ${onReleaseStored}::boolean, ${release}::text, ${quietStored}::int, c.ts
|
|
208
229
|
FROM (SELECT clock_timestamp() AS ts) c
|
|
209
230
|
ON CONFLICT (key) DO UPDATE SET
|
|
210
231
|
status = CASE WHEN a.status = 'acknowledged' THEN 'acknowledged' ELSE 'open' END,
|
|
@@ -227,6 +248,13 @@ export function createAlerts(config) {
|
|
|
227
248
|
WHEN ${traceId}::text IS NULL THEN a.trace_ids
|
|
228
249
|
ELSE (EXCLUDED.trace_ids || array_remove(a.trace_ids, ${traceId}::text))[1:10] END,
|
|
229
250
|
resend_after_ms = COALESCE(EXCLUDED.resend_after_ms, CASE WHEN a.status = 'resolved' THEN NULL ELSE a.resend_after_ms END),
|
|
251
|
+
resend_on_new_release = COALESCE(EXCLUDED.resend_on_new_release, CASE WHEN a.status = 'resolved' THEN NULL ELSE a.resend_on_new_release END),
|
|
252
|
+
last_sent_release = CASE WHEN NOT ${sendsSql} THEN a.last_sent_release
|
|
253
|
+
WHEN a.status = 'resolved' THEN ${release}::text
|
|
254
|
+
WHEN ${release}::text IS NULL OR a.last_sent_release IS NULL THEN COALESCE(${release}::text, a.last_sent_release)
|
|
255
|
+
WHEN (SELECT r.first_seen_at FROM pipework_alert_releases r WHERE r."release" = ${release}::text)
|
|
256
|
+
> (SELECT r.first_seen_at FROM pipework_alert_releases r WHERE r."release" = a.last_sent_release)
|
|
257
|
+
THEN ${release}::text ELSE a.last_sent_release END,
|
|
230
258
|
resolve_after_quiet_ms = COALESCE(EXCLUDED.resolve_after_quiet_ms, CASE WHEN a.status = 'resolved' THEN NULL ELSE a.resolve_after_quiet_ms END),
|
|
231
259
|
last_sent_at = CASE WHEN ${sendsSql} THEN ${seenSql} ELSE a.last_sent_at END,
|
|
232
260
|
updated_at = EXCLUDED.updated_at
|
|
@@ -552,6 +580,9 @@ export function createAlerts(config) {
|
|
|
552
580
|
log.error({ err }, 'alert delivery sweep failed');
|
|
553
581
|
});
|
|
554
582
|
async function runTick() {
|
|
583
|
+
const running = getContext()?.instance.config.release ?? null;
|
|
584
|
+
if (running !== null)
|
|
585
|
+
await recordRelease(running);
|
|
555
586
|
let resolved = await autoResolve();
|
|
556
587
|
resolved += await runSources();
|
|
557
588
|
await pruneOccurrences();
|