@cat-factory/integrations 0.8.3 → 0.9.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/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/modules/datadog/DatadogObservabilityAdapter.d.ts +23 -0
- package/dist/modules/datadog/DatadogObservabilityAdapter.d.ts.map +1 -0
- package/dist/modules/datadog/DatadogObservabilityAdapter.js +47 -0
- package/dist/modules/datadog/DatadogObservabilityAdapter.js.map +1 -0
- package/dist/modules/datadog/datadog.logic.d.ts +2 -2
- package/dist/modules/datadog/datadog.logic.d.ts.map +1 -1
- package/dist/modules/datadog/datadog.logic.js +2 -2
- package/dist/modules/datadog/datadog.logic.js.map +1 -1
- package/dist/modules/observability/RegistryReleaseHealthProvider.d.ts +48 -0
- package/dist/modules/observability/RegistryReleaseHealthProvider.d.ts.map +1 -0
- package/dist/modules/observability/RegistryReleaseHealthProvider.js +71 -0
- package/dist/modules/observability/RegistryReleaseHealthProvider.js.map +1 -0
- package/dist/modules/observability/registry.d.ts +12 -0
- package/dist/modules/observability/registry.d.ts.map +1 -0
- package/dist/modules/observability/registry.js +15 -0
- package/dist/modules/observability/registry.js.map +1 -0
- package/package.json +3 -3
- package/dist/modules/datadog/DatadogReleaseHealthProvider.d.ts +0 -30
- package/dist/modules/datadog/DatadogReleaseHealthProvider.d.ts.map +0 -1
- package/dist/modules/datadog/DatadogReleaseHealthProvider.js +0 -101
- package/dist/modules/datadog/DatadogReleaseHealthProvider.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -61,9 +61,11 @@ export { localRunnerUrlError } from './modules/providers/localModelUrl.js';
|
|
|
61
61
|
export { OpenRouterCatalogService, type OpenRouterCatalogServiceDependencies, OPENROUTER_BASE_URL, usdRateForSpendCurrency, } from './modules/providers/OpenRouterCatalogService.js';
|
|
62
62
|
export * as providersLogic from './modules/providers/providers.logic.js';
|
|
63
63
|
export { DEFAULT_USAGE_WINDOW_MS, chooseToken, windowUsage, type PoolRotationRecord, } from './modules/providers/providers.logic.js';
|
|
64
|
-
export {
|
|
64
|
+
export { RegistryReleaseHealthProvider, type RegistryReleaseHealthProviderDependencies, type ObservabilityAdapter, type ObservabilityAdapterFactory, type ObservabilityProviderRegistry, } from './modules/observability/RegistryReleaseHealthProvider.js';
|
|
65
|
+
export { defaultObservabilityRegistry } from './modules/observability/registry.js';
|
|
66
|
+
export { DatadogObservabilityAdapter, type DatadogCredentialsShape, } from './modules/datadog/DatadogObservabilityAdapter.js';
|
|
65
67
|
export { DatadogClient, type DatadogCredentials, type DatadogClientOptions, } from './modules/datadog/DatadogClient.js';
|
|
66
|
-
export {
|
|
68
|
+
export { OBSERVABILITY_CIPHER_INFO, DatadogApiError, normalizeDatadogSite, datadogApiBase, } from './modules/datadog/datadog.logic.js';
|
|
67
69
|
export { PagerDutyEnrichmentProvider, type PagerDutyEnrichmentProviderOptions, } from './modules/pagerduty/PagerDutyEnrichmentProvider.js';
|
|
68
70
|
export { IncidentIoEnrichmentProvider, type IncidentIoEnrichmentProviderOptions, } from './modules/incidentio/IncidentIoEnrichmentProvider.js';
|
|
69
71
|
export { SendGridEmailSender, ResendEmailSender, createEmailSender, EMAIL_CIPHER_INFO, type EmailProviderConfig, type SendGridConfig, type ResendConfig, } from './modules/email/adapters.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -74,12 +74,15 @@ export { localRunnerUrlError } from './modules/providers/localModelUrl.js';
|
|
|
74
74
|
export { OpenRouterCatalogService, OPENROUTER_BASE_URL, usdRateForSpendCurrency, } from './modules/providers/OpenRouterCatalogService.js';
|
|
75
75
|
export * as providersLogic from './modules/providers/providers.logic.js';
|
|
76
76
|
export { DEFAULT_USAGE_WINDOW_MS, chooseToken, windowUsage, } from './modules/providers/providers.logic.js';
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
|
|
77
|
+
// Post-release-health: the pluggable observability provider the gate reads (a registry
|
|
78
|
+
// of vendor adapters — Datadog today) + the Datadog adapter / thin fetch client, plus the
|
|
79
|
+
// optional incident-enrichment providers (PagerDuty / incident.io) that annotate — never
|
|
80
|
+
// re-alert — an incident those systems already opened.
|
|
81
|
+
export { RegistryReleaseHealthProvider, } from './modules/observability/RegistryReleaseHealthProvider.js';
|
|
82
|
+
export { defaultObservabilityRegistry } from './modules/observability/registry.js';
|
|
83
|
+
export { DatadogObservabilityAdapter, } from './modules/datadog/DatadogObservabilityAdapter.js';
|
|
81
84
|
export { DatadogClient, } from './modules/datadog/DatadogClient.js';
|
|
82
|
-
export {
|
|
85
|
+
export { OBSERVABILITY_CIPHER_INFO, DatadogApiError, normalizeDatadogSite, datadogApiBase, } from './modules/datadog/datadog.logic.js';
|
|
83
86
|
export { PagerDutyEnrichmentProvider, } from './modules/pagerduty/PagerDutyEnrichmentProvider.js';
|
|
84
87
|
export { IncidentIoEnrichmentProvider, } from './modules/incidentio/IncidentIoEnrichmentProvider.js';
|
|
85
88
|
export { SendGridEmailSender, ResendEmailSender, createEmailSender, EMAIL_CIPHER_INFO, } from './modules/email/adapters.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,EACL,yBAAyB,GAE1B,MAAM,+CAA+C,CAAA;AACtD,OAAO,EAAE,aAAa,EAAkC,MAAM,mCAAmC,CAAA;AACjG,OAAO,EACL,iBAAiB,GAElB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAmC,MAAM,oCAAoC,CAAA;AACpG,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAA;AACxE,OAAO,EACL,uBAAuB,GAIxB,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAEtE,OAAO,EACL,yBAAyB,GAE1B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EACL,qBAAqB,EAErB,gBAAgB,GACjB,MAAM,8CAA8C,CAAA;AACrD,OAAO,EACL,sBAAsB,GAEvB,MAAM,+CAA+C,CAAA;AACtD,OAAO,EACL,mBAAmB,GAGpB,MAAM,4CAA4C,CAAA;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAA;AAClF,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AACxE,OAAO,KAAK,eAAe,MAAM,yCAAyC,CAAA;AAC1E,OAAO,KAAK,WAAW,MAAM,qCAAqC,CAAA;AAClE,OAAO,KAAK,eAAe,MAAM,0CAA0C,CAAA;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAA;AACjF,iFAAiF;AACjF,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAClG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAA;AAE9E,OAAO,EACL,qBAAqB,GAEtB,MAAM,0CAA0C,CAAA;AACjD,OAAO,EACL,iBAAiB,EAEjB,YAAY,GACb,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,qBAAqB,EAErB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAA;AAC5D,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,oBAAoB,GAIrB,MAAM,2CAA2C,CAAA;AAClD,OAAO,KAAK,eAAe,MAAM,wCAAwC,CAAA;AACzE,OAAO,KAAK,kBAAkB,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EACL,qBAAqB,GAEtB,MAAM,8CAA8C,CAAA;AACrD,OAAO,EACL,yBAAyB,GAE1B,MAAM,0CAA0C,CAAA;AACjD,OAAO,KAAK,iBAAiB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EACL,oBAAoB,GAErB,MAAM,yCAAyC,CAAA;AAChD,mFAAmF;AACnF,yFAAyF;AACzF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAE5E,OAAO,EACL,4BAA4B,EAG5B,oBAAoB,GACrB,MAAM,wDAAwD,CAAA;AAC/D,OAAO,EACL,8BAA8B,GAI/B,MAAM,0DAA0D,CAAA;AACjE,OAAO,EACL,0BAA0B,GAE3B,MAAM,sDAAsD,CAAA;AAC7D,OAAO,KAAK,iBAAiB,MAAM,8CAA8C,CAAA;AACjF,mFAAmF;AACnF,6EAA6E;AAC7E,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,8CAA8C,CAAA;AAErD,OAAO,EACL,2BAA2B,GAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAA;AAClE,4EAA4E;AAC5E,mFAAmF;AACnF,+EAA+E;AAC/E,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GAEnB,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,kFAAkF;AAClF,mFAAmF;AACnF,qFAAqF;AACrF,OAAO,EACL,wBAAwB,GAEzB,MAAM,6CAA6C,CAAA;AACpD,OAAO,EACL,sBAAsB,GAEvB,MAAM,2CAA2C,CAAA;AAClD,OAAO,EACL,oBAAoB,GAErB,MAAM,yCAAyC,CAAA;AAChD,OAAO,EACL,yBAAyB,GAE1B,MAAM,8CAA8C,CAAA;AACrD,OAAO,EACL,cAAc,EACd,aAAa,GAId,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,YAAY,GACb,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,2BAA2B,GAI5B,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EACL,aAAa,GAKd,MAAM,sCAAsC,CAAA;AAC7C,OAAO,EACL,2BAA2B,EAG3B,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EACL,yBAAyB,GAG1B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EACL,wBAAwB,EAExB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iDAAiD,CAAA;AACxD,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AACxE,OAAO,EACL,uBAAuB,EACvB,WAAW,EACX,WAAW,GAEZ,MAAM,wCAAwC,CAAA;AAE/C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ReleaseEvidence, ReleaseHealthConfigRecord, ReleaseSignal } from '@cat-factory/kernel';
|
|
2
|
+
import type { ObservabilityAdapter } from '../observability/RegistryReleaseHealthProvider.js';
|
|
3
|
+
/** Decrypted Datadog credentials (the sealed `credentials` blob, parsed). */
|
|
4
|
+
export interface DatadogCredentialsShape {
|
|
5
|
+
site: string;
|
|
6
|
+
apiKey: string;
|
|
7
|
+
appKey: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The Datadog observability adapter: reads a block's configured monitors/SLOs and recent
|
|
11
|
+
* error logs through the Datadog API. Built from already-decrypted credentials by the
|
|
12
|
+
* provider registry (`RegistryReleaseHealthProvider` owns connection loading + decryption,
|
|
13
|
+
* config resolution and the verdict reduction — this adapter is purely the Datadog reads).
|
|
14
|
+
*/
|
|
15
|
+
export declare class DatadogObservabilityAdapter implements ObservabilityAdapter {
|
|
16
|
+
private readonly client;
|
|
17
|
+
constructor(credentials: DatadogCredentialsShape, opts?: {
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
});
|
|
20
|
+
readSignals(config: ReleaseHealthConfigRecord, since: number): Promise<ReleaseSignal[]>;
|
|
21
|
+
recentErrors(config: ReleaseHealthConfigRecord, since: number): Promise<ReleaseEvidence['errors']>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=DatadogObservabilityAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogObservabilityAdapter.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogObservabilityAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAA;AAE7F,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,oBAAoB;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IAEtC,YAAY,WAAW,EAAE,uBAAuB,EAAE,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;KAAO,EAKxF;IAEK,WAAW,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B5F;IAEK,YAAY,CAChB,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAUpC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DatadogClient } from './DatadogClient.js';
|
|
2
|
+
import { mapMonitorState, mapSloState } from './datadog.logic.js';
|
|
3
|
+
/**
|
|
4
|
+
* The Datadog observability adapter: reads a block's configured monitors/SLOs and recent
|
|
5
|
+
* error logs through the Datadog API. Built from already-decrypted credentials by the
|
|
6
|
+
* provider registry (`RegistryReleaseHealthProvider` owns connection loading + decryption,
|
|
7
|
+
* config resolution and the verdict reduction — this adapter is purely the Datadog reads).
|
|
8
|
+
*/
|
|
9
|
+
export class DatadogObservabilityAdapter {
|
|
10
|
+
client;
|
|
11
|
+
constructor(credentials, opts = {}) {
|
|
12
|
+
this.client = new DatadogClient({ site: credentials.site, apiKey: credentials.apiKey, appKey: credentials.appKey }, { fetchImpl: opts.fetchImpl });
|
|
13
|
+
}
|
|
14
|
+
async readSignals(config, since) {
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
const fromTs = Math.floor(since / 1000);
|
|
17
|
+
const toTs = Math.floor(now / 1000);
|
|
18
|
+
const monitors = await Promise.all(config.monitorIds.map(async (id) => {
|
|
19
|
+
const m = await this.client.getMonitor(id);
|
|
20
|
+
// Attribute the alert to THIS release: a monitor already alerting before the
|
|
21
|
+
// release marker (`since`) is a pre-existing incident, not this PR's regression.
|
|
22
|
+
const state = mapMonitorState(m.overallState, { stateModifiedMs: m.stateModifiedMs, since });
|
|
23
|
+
return { kind: 'monitor', id, name: m.name, state };
|
|
24
|
+
}));
|
|
25
|
+
const slos = await Promise.all(config.sloIds.map(async (id) => {
|
|
26
|
+
const s = await this.client.getSloState(id, fromTs, toTs);
|
|
27
|
+
const state = mapSloState(s.sliValue, s.target);
|
|
28
|
+
const detail = s.sliValue !== null && s.target !== null
|
|
29
|
+
? `SLI ${s.sliValue.toFixed(2)} vs target ${s.target}`
|
|
30
|
+
: undefined;
|
|
31
|
+
return { kind: 'slo', id, name: s.name, state, detail };
|
|
32
|
+
}));
|
|
33
|
+
return [...monitors, ...slos];
|
|
34
|
+
}
|
|
35
|
+
async recentErrors(config, since) {
|
|
36
|
+
// Pull recent error logs scoped to the env (when configured), best-effort, over the
|
|
37
|
+
// window [since, now].
|
|
38
|
+
const query = config.envTag ? `status:error env:${config.envTag}` : 'status:error';
|
|
39
|
+
const ddErrors = await this.client.recentErrorLogs(query, since, Date.now());
|
|
40
|
+
return ddErrors.map((e) => ({
|
|
41
|
+
title: e.title,
|
|
42
|
+
count: e.count,
|
|
43
|
+
sampleMessage: e.sampleMessage,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=DatadogObservabilityAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatadogObservabilityAdapter.js","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogObservabilityAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReleaseSignalState } from '@cat-factory/kernel';
|
|
2
|
-
/** The domain tag used to seal
|
|
3
|
-
export declare const
|
|
2
|
+
/** The domain tag used to seal observability credentials at rest (HKDF info). */
|
|
3
|
+
export declare const OBSERVABILITY_CIPHER_INFO = "cat-factory:observability";
|
|
4
4
|
/**
|
|
5
5
|
* Validate a configured Datadog `site` host and return the normalized host (no
|
|
6
6
|
* scheme/path). Throws when it isn't a recognised Datadog host so a misconfiguration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datadog.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/datadog.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,
|
|
1
|
+
{"version":3,"file":"datadog.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/datadog.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,8BAA8B,CAAA;AAYpE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxD,kBAAkB,CAuBpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,kBAAkB,CAG9F;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACW,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAIxB;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Pure helpers for the Datadog post-release-health integration: site validation
|
|
2
2
|
// (anti-SSRF — only real Datadog hosts), base-URL construction, and mapping Datadog's
|
|
3
3
|
// monitor/SLO shapes onto the runtime-neutral `ReleaseSignalState`.
|
|
4
|
-
/** The domain tag used to seal
|
|
5
|
-
export const
|
|
4
|
+
/** The domain tag used to seal observability credentials at rest (HKDF info). */
|
|
5
|
+
export const OBSERVABILITY_CIPHER_INFO = 'cat-factory:observability';
|
|
6
6
|
/** Datadog site host suffixes we allow a connection to point at (anti-SSRF). */
|
|
7
7
|
const ALLOWED_SITE_SUFFIXES = [
|
|
8
8
|
'datadoghq.com',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datadog.logic.js","sourceRoot":"","sources":["../../../src/modules/datadog/datadog.logic.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,sFAAsF;AACtF,oEAAoE;AAEpE,
|
|
1
|
+
{"version":3,"file":"datadog.logic.js","sourceRoot":"","sources":["../../../src/modules/datadog/datadog.logic.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,sFAAsF;AACtF,oEAAoE;AAEpE,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAA;AAEpE,gFAAgF;AAChF,MAAM,qBAAqB,GAAG;IAC5B,eAAe;IACf,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI;SACjB,IAAI,EAAE;SACN,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,WAAW,EAAE,CAAA;IAChB,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAA;IAC1E,MAAM,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACxF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,eAAe,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAA;AACpD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,YAAgC,EAChC,WAAyD;IAEzD,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3C,KAAK,OAAO,CAAC;QACb,KAAK,gBAAgB;YACnB,kFAAkF;YAClF,+CAA+C;YAC/C,IACE,WAAW;gBACX,WAAW,CAAC,eAAe,KAAK,SAAS;gBACzC,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,EAC/C,CAAC;gBACD,OAAO,MAAM,CAAA;YACf,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,eAAe;YAClB,OAAO,MAAM,CAAA;QACf,KAAK,IAAI;YACP,OAAO,IAAI,CAAA;QACb;YACE,4DAA4D;YAC5D,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAuB,EAAE,MAAqB;IACxE,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC1D,OAAO,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B,QAAQ;IACR,MAAM;IAFjB,YACW,QAAgB,EAChB,MAAc;QAEvB,KAAK,CAAC,WAAW,QAAQ,YAAY,MAAM,EAAE,CAAC,CAAA;wBAHrC,QAAQ;sBACR,MAAM;QAGf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { BlockRepository, ObservabilityConnectionRepository, ObservabilityProviderKind, ReleaseEvidence, ReleaseHealthConfigRecord, ReleaseHealthConfigRepository, ReleaseHealthProvider, ReleaseHealthReport, ReleaseSignal, SecretCipher } from '@cat-factory/kernel';
|
|
2
|
+
/**
|
|
3
|
+
* A single observability vendor's reads, built from its already-decrypted credentials.
|
|
4
|
+
* The composite owns everything vendor-neutral (connection loading + decryption, config
|
|
5
|
+
* resolution up the frame chain, the verdict reduction); an adapter just turns a config
|
|
6
|
+
* into signals + recent errors for its vendor.
|
|
7
|
+
*/
|
|
8
|
+
export interface ObservabilityAdapter {
|
|
9
|
+
readSignals(config: ReleaseHealthConfigRecord, since: number): Promise<ReleaseSignal[]>;
|
|
10
|
+
recentErrors(config: ReleaseHealthConfigRecord, since: number): Promise<ReleaseEvidence['errors']>;
|
|
11
|
+
}
|
|
12
|
+
/** Builds an adapter from decrypted credentials. Registered per provider kind. */
|
|
13
|
+
export type ObservabilityAdapterFactory = (credentials: unknown, opts: {
|
|
14
|
+
fetchImpl?: typeof fetch;
|
|
15
|
+
}) => ObservabilityAdapter;
|
|
16
|
+
/** The set of observability providers a facade can serve. */
|
|
17
|
+
export type ObservabilityProviderRegistry = Partial<Record<ObservabilityProviderKind, ObservabilityAdapterFactory>>;
|
|
18
|
+
export interface RegistryReleaseHealthProviderDependencies {
|
|
19
|
+
observabilityConnectionRepository: ObservabilityConnectionRepository;
|
|
20
|
+
releaseHealthConfigRepository: ReleaseHealthConfigRepository;
|
|
21
|
+
/** Resolves the service-frame config when a task block has none of its own. */
|
|
22
|
+
blockRepository: BlockRepository;
|
|
23
|
+
/** Decrypts the workspace's sealed credentials blob at call time. */
|
|
24
|
+
secretCipher: SecretCipher;
|
|
25
|
+
/** The provider adapters this facade can build. */
|
|
26
|
+
registry: ObservabilityProviderRegistry;
|
|
27
|
+
/** Override fetch (tests). */
|
|
28
|
+
fetchImpl?: typeof fetch;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The pluggable `ReleaseHealthProvider` the post-release-health gate reads: resolve the
|
|
32
|
+
* block's monitor/SLO config (its own, else its service frame's) → load the workspace's
|
|
33
|
+
* observability connection → build the matching provider adapter from its decrypted
|
|
34
|
+
* credentials → read each signal → reduce to a single verdict. On a regression,
|
|
35
|
+
* `gatherEvidence` adds the adapter's recent error groups for the on-call agent. Returns
|
|
36
|
+
* a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
37
|
+
*/
|
|
38
|
+
export declare class RegistryReleaseHealthProvider implements ReleaseHealthProvider {
|
|
39
|
+
private readonly deps;
|
|
40
|
+
constructor(deps: RegistryReleaseHealthProviderDependencies);
|
|
41
|
+
probe(workspaceId: string, blockId: string, since: number): Promise<ReleaseHealthReport>;
|
|
42
|
+
gatherEvidence(workspaceId: string, blockId: string, since: number): Promise<ReleaseEvidence>;
|
|
43
|
+
/** Resolve config + connection + adapter for a block. Null when unconfigured. */
|
|
44
|
+
private resolve;
|
|
45
|
+
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
46
|
+
private resolveConfig;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=RegistryReleaseHealthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistryReleaseHealthProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/observability/RegistryReleaseHealthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,iCAAiC,EACjC,yBAAyB,EACzB,eAAe,EACf,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACvF,YAAY,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;CACnG;AAED,kFAAkF;AAClF,MAAM,MAAM,2BAA2B,GAAG,CACxC,WAAW,EAAE,OAAO,EACpB,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAE,KAC/B,oBAAoB,CAAA;AAEzB,6DAA6D;AAC7D,MAAM,MAAM,6BAA6B,GAAG,OAAO,CACjD,MAAM,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAC/D,CAAA;AAED,MAAM,WAAW,yCAAyC;IACxD,iCAAiC,EAAE,iCAAiC,CAAA;IACpE,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAA;IAChC,qEAAqE;IACrE,YAAY,EAAE,YAAY,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,EAAE,6BAA6B,CAAA;IACvC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;;GAOG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,yCAAyC,EAAI;IAE1E,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAU7F;IAEK,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,CAc1B;IAED,iFAAiF;YACnE,OAAO;IAmBrB,mFAAmF;YACrE,aAAa;CAiB5B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pluggable `ReleaseHealthProvider` the post-release-health gate reads: resolve the
|
|
3
|
+
* block's monitor/SLO config (its own, else its service frame's) → load the workspace's
|
|
4
|
+
* observability connection → build the matching provider adapter from its decrypted
|
|
5
|
+
* credentials → read each signal → reduce to a single verdict. On a regression,
|
|
6
|
+
* `gatherEvidence` adds the adapter's recent error groups for the on-call agent. Returns
|
|
7
|
+
* a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
8
|
+
*/
|
|
9
|
+
export class RegistryReleaseHealthProvider {
|
|
10
|
+
deps;
|
|
11
|
+
constructor(deps) {
|
|
12
|
+
this.deps = deps;
|
|
13
|
+
}
|
|
14
|
+
async probe(workspaceId, blockId, since) {
|
|
15
|
+
const resolved = await this.resolve(workspaceId, blockId);
|
|
16
|
+
if (!resolved)
|
|
17
|
+
return { status: 'healthy', signals: [] };
|
|
18
|
+
const { adapter, config } = resolved;
|
|
19
|
+
const signals = await adapter.readSignals(config, since);
|
|
20
|
+
if (signals.length === 0)
|
|
21
|
+
return { status: 'pending', signals };
|
|
22
|
+
if (signals.some((s) => s.state === 'alert'))
|
|
23
|
+
return { status: 'regressed', signals };
|
|
24
|
+
if (signals.every((s) => s.state === 'no_data'))
|
|
25
|
+
return { status: 'pending', signals };
|
|
26
|
+
return { status: 'healthy', signals };
|
|
27
|
+
}
|
|
28
|
+
async gatherEvidence(workspaceId, blockId, since) {
|
|
29
|
+
const resolved = await this.resolve(workspaceId, blockId);
|
|
30
|
+
if (!resolved)
|
|
31
|
+
return { regressedSignals: [], errors: [] };
|
|
32
|
+
const { adapter, config } = resolved;
|
|
33
|
+
const signals = await adapter.readSignals(config, since);
|
|
34
|
+
const regressedSignals = signals.filter((s) => s.state === 'alert');
|
|
35
|
+
const errors = await adapter.recentErrors(config, since);
|
|
36
|
+
return {
|
|
37
|
+
regressedSignals,
|
|
38
|
+
errors,
|
|
39
|
+
notes: `Monitored ${config.monitorIds.length} monitor(s) and ${config.sloIds.length} SLO(s)${config.envTag ? ` for env ${config.envTag}` : ''}.`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Resolve config + connection + adapter for a block. Null when unconfigured. */
|
|
43
|
+
async resolve(workspaceId, blockId) {
|
|
44
|
+
const config = await this.resolveConfig(workspaceId, blockId);
|
|
45
|
+
if (!config || (config.monitorIds.length === 0 && config.sloIds.length === 0))
|
|
46
|
+
return null;
|
|
47
|
+
const connection = await this.deps.observabilityConnectionRepository.get(workspaceId);
|
|
48
|
+
if (!connection)
|
|
49
|
+
return null;
|
|
50
|
+
const factory = this.deps.registry[connection.provider];
|
|
51
|
+
if (!factory)
|
|
52
|
+
return null;
|
|
53
|
+
const credentials = JSON.parse(await this.deps.secretCipher.decrypt(connection.credentials));
|
|
54
|
+
const adapter = factory(credentials, { fetchImpl: this.deps.fetchImpl });
|
|
55
|
+
return { adapter, config };
|
|
56
|
+
}
|
|
57
|
+
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
58
|
+
async resolveConfig(workspaceId, blockId) {
|
|
59
|
+
let currentId = blockId;
|
|
60
|
+
// Walk up the parent chain (task → module → frame), bounded against cycles.
|
|
61
|
+
for (let hops = 0; currentId && hops < 5; hops++) {
|
|
62
|
+
const config = await this.deps.releaseHealthConfigRepository.getByBlock(workspaceId, currentId);
|
|
63
|
+
if (config)
|
|
64
|
+
return config;
|
|
65
|
+
const block = await this.deps.blockRepository.get(workspaceId, currentId);
|
|
66
|
+
currentId = block?.parentId ?? null;
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=RegistryReleaseHealthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistryReleaseHealthProvider.js","sourceRoot":"","sources":["../../../src/modules/observability/RegistryReleaseHealthProvider.ts"],"names":[],"mappings":"AAgDA;;;;;;;GAOG;AACH,MAAM,OAAO,6BAA6B;IACX,IAAI;IAAjC,YAA6B,IAA+C;oBAA/C,IAAI;IAA8C,CAAC;IAEhF,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAa;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACxD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;QAEpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;QACrF,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;QACtF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,WAAmB,EACnB,OAAe,EACf,KAAa;QAEb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAC1D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;QAEpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAA;QACnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAExD,OAAO;YACL,gBAAgB;YAChB,MAAM;YACN,KAAK,EAAE,aAAa,MAAM,CAAC,UAAU,CAAC,MAAM,mBAAmB,MAAM,CAAC,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;SACjJ,CAAA;IACH,CAAC;IAED,iFAAiF;IACzE,KAAK,CAAC,OAAO,CACnB,WAAmB,EACnB,OAAe;QAEf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAE1F,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACrF,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QAEzB,MAAM,WAAW,GAAY,IAAI,CAAC,KAAK,CACrC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAC7D,CAAA;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACxE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAC5B,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,aAAa,CACzB,WAAmB,EACnB,OAAe;QAEf,IAAI,SAAS,GAAkB,OAAO,CAAA;QACtC,4EAA4E;QAC5E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,SAAS,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,UAAU,CACrE,WAAW,EACX,SAAS,CACV,CAAA;YACD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACzE,SAAS,GAAG,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAA;QACrC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ObservabilityProviderRegistry } from './RegistryReleaseHealthProvider.js';
|
|
2
|
+
/**
|
|
3
|
+
* The observability providers a facade can serve. Datadog is the only adapter today;
|
|
4
|
+
* adding a vendor is a new entry here (+ its adapter + credential shape) — the gate, the
|
|
5
|
+
* service, the routes and the persistence are all vendor-neutral around it.
|
|
6
|
+
*
|
|
7
|
+
* Each factory validates its decrypted credentials blob at this boundary (rather than
|
|
8
|
+
* blind-casting), so a drifted/corrupted row fails with a clear error here instead of
|
|
9
|
+
* deep inside the vendor client during a live probe.
|
|
10
|
+
*/
|
|
11
|
+
export declare const defaultObservabilityRegistry: ObservabilityProviderRegistry;
|
|
12
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/modules/observability/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAA;AAEvF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,EAAE,6BAG1C,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parseDatadogCredentials } from '@cat-factory/contracts';
|
|
2
|
+
import { DatadogObservabilityAdapter } from '../datadog/DatadogObservabilityAdapter.js';
|
|
3
|
+
/**
|
|
4
|
+
* The observability providers a facade can serve. Datadog is the only adapter today;
|
|
5
|
+
* adding a vendor is a new entry here (+ its adapter + credential shape) — the gate, the
|
|
6
|
+
* service, the routes and the persistence are all vendor-neutral around it.
|
|
7
|
+
*
|
|
8
|
+
* Each factory validates its decrypted credentials blob at this boundary (rather than
|
|
9
|
+
* blind-casting), so a drifted/corrupted row fails with a clear error here instead of
|
|
10
|
+
* deep inside the vendor client during a live probe.
|
|
11
|
+
*/
|
|
12
|
+
export const defaultObservabilityRegistry = {
|
|
13
|
+
datadog: (credentials, opts) => new DatadogObservabilityAdapter(parseDatadogCredentials(credentials), opts),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/modules/observability/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAA;AAGvF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAkC;IACzE,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAC7B,IAAI,2BAA2B,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;CAC9E,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/integrations",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^6.0.209",
|
|
28
|
-
"@cat-factory/contracts": "0.
|
|
29
|
-
"@cat-factory/kernel": "0.
|
|
28
|
+
"@cat-factory/contracts": "0.12.0",
|
|
29
|
+
"@cat-factory/kernel": "0.12.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "7.0.1-rc",
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { BlockRepository, DatadogConnectionRepository, ReleaseEvidence, ReleaseHealthConfigRepository, ReleaseHealthProvider, ReleaseHealthReport, SecretCipher } from '@cat-factory/kernel';
|
|
2
|
-
export interface DatadogReleaseHealthProviderDependencies {
|
|
3
|
-
datadogConnectionRepository: DatadogConnectionRepository;
|
|
4
|
-
releaseHealthConfigRepository: ReleaseHealthConfigRepository;
|
|
5
|
-
/** Resolves the service-frame config when a task block has none of its own. */
|
|
6
|
-
blockRepository: BlockRepository;
|
|
7
|
-
/** Decrypts the workspace's Datadog API/app keys at call time. */
|
|
8
|
-
secretCipher: SecretCipher;
|
|
9
|
-
/** Override fetch (tests). */
|
|
10
|
-
fetchImpl?: typeof fetch;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Reads a block's release health from Datadog for the post-release-health gate:
|
|
14
|
-
* resolve the block's monitor/SLO config (its own, else its service frame's) → read
|
|
15
|
-
* each monitor's state + each SLO's SLI-vs-target → reduce to a single verdict. On a
|
|
16
|
-
* regression, `gatherEvidence` adds recent error-log groups for the on-call agent.
|
|
17
|
-
* Returns a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
18
|
-
*/
|
|
19
|
-
export declare class DatadogReleaseHealthProvider implements ReleaseHealthProvider {
|
|
20
|
-
private readonly deps;
|
|
21
|
-
constructor(deps: DatadogReleaseHealthProviderDependencies);
|
|
22
|
-
probe(workspaceId: string, blockId: string, since: number): Promise<ReleaseHealthReport>;
|
|
23
|
-
gatherEvidence(workspaceId: string, blockId: string, since: number): Promise<ReleaseEvidence>;
|
|
24
|
-
/** Resolve the connection + config for a block, building a client. Null when unconfigured. */
|
|
25
|
-
private resolve;
|
|
26
|
-
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
27
|
-
private resolveConfig;
|
|
28
|
-
private readSignals;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=DatadogReleaseHealthProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatadogReleaseHealthProvider.d.ts","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogReleaseHealthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,2BAA2B,EAC3B,eAAe,EAEf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EAEnB,YAAY,EACb,MAAM,qBAAqB,CAAA;AAI5B,MAAM,WAAW,wCAAwC;IACvD,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,6BAA6B,EAAE,6BAA6B,CAAA;IAC5D,+EAA+E;IAC/E,eAAe,EAAE,eAAe,CAAA;IAChC,kEAAkE;IAClE,YAAY,EAAE,YAAY,CAAA;IAC1B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,4BAA6B,YAAW,qBAAqB;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,wCAAwC,EAAI;IAEzE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAU7F;IAEK,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC,CAuB1B;IAED,8FAA8F;YAChF,OAAO;IAoBrB,mFAAmF;YACrE,aAAa;YAkBb,WAAW;CA+B1B"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { DatadogClient } from './DatadogClient.js';
|
|
2
|
-
import { mapMonitorState, mapSloState } from './datadog.logic.js';
|
|
3
|
-
/**
|
|
4
|
-
* Reads a block's release health from Datadog for the post-release-health gate:
|
|
5
|
-
* resolve the block's monitor/SLO config (its own, else its service frame's) → read
|
|
6
|
-
* each monitor's state + each SLO's SLI-vs-target → reduce to a single verdict. On a
|
|
7
|
-
* regression, `gatherEvidence` adds recent error-log groups for the on-call agent.
|
|
8
|
-
* Returns a `healthy`/empty report when nothing is configured (the gate passes through).
|
|
9
|
-
*/
|
|
10
|
-
export class DatadogReleaseHealthProvider {
|
|
11
|
-
deps;
|
|
12
|
-
constructor(deps) {
|
|
13
|
-
this.deps = deps;
|
|
14
|
-
}
|
|
15
|
-
async probe(workspaceId, blockId, since) {
|
|
16
|
-
const resolved = await this.resolve(workspaceId, blockId);
|
|
17
|
-
if (!resolved)
|
|
18
|
-
return { status: 'healthy', signals: [] };
|
|
19
|
-
const { client, config } = resolved;
|
|
20
|
-
const signals = await this.readSignals(client, config, since);
|
|
21
|
-
if (signals.length === 0)
|
|
22
|
-
return { status: 'pending', signals };
|
|
23
|
-
if (signals.some((s) => s.state === 'alert'))
|
|
24
|
-
return { status: 'regressed', signals };
|
|
25
|
-
if (signals.every((s) => s.state === 'no_data'))
|
|
26
|
-
return { status: 'pending', signals };
|
|
27
|
-
return { status: 'healthy', signals };
|
|
28
|
-
}
|
|
29
|
-
async gatherEvidence(workspaceId, blockId, since) {
|
|
30
|
-
const resolved = await this.resolve(workspaceId, blockId);
|
|
31
|
-
if (!resolved)
|
|
32
|
-
return { regressedSignals: [], errors: [] };
|
|
33
|
-
const { client, config } = resolved;
|
|
34
|
-
const signals = await this.readSignals(client, config, since);
|
|
35
|
-
const regressedSignals = signals.filter((s) => s.state === 'alert');
|
|
36
|
-
// Pull recent error logs scoped to the env (when configured), best-effort, over the
|
|
37
|
-
// window [since, now].
|
|
38
|
-
const query = config.envTag ? `status:error env:${config.envTag}` : 'status:error';
|
|
39
|
-
const ddErrors = await client.recentErrorLogs(query, since, Date.now());
|
|
40
|
-
const errors = ddErrors.map((e) => ({
|
|
41
|
-
title: e.title,
|
|
42
|
-
count: e.count,
|
|
43
|
-
sampleMessage: e.sampleMessage,
|
|
44
|
-
}));
|
|
45
|
-
return {
|
|
46
|
-
regressedSignals,
|
|
47
|
-
errors,
|
|
48
|
-
notes: `Monitored ${config.monitorIds.length} monitor(s) and ${config.sloIds.length} SLO(s)${config.envTag ? ` for env ${config.envTag}` : ''}.`,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/** Resolve the connection + config for a block, building a client. Null when unconfigured. */
|
|
52
|
-
async resolve(workspaceId, blockId) {
|
|
53
|
-
const config = await this.resolveConfig(workspaceId, blockId);
|
|
54
|
-
if (!config || (config.monitorIds.length === 0 && config.sloIds.length === 0))
|
|
55
|
-
return null;
|
|
56
|
-
const connection = await this.deps.datadogConnectionRepository.get(workspaceId);
|
|
57
|
-
if (!connection)
|
|
58
|
-
return null;
|
|
59
|
-
const [apiKey, appKey] = await Promise.all([
|
|
60
|
-
this.deps.secretCipher.decrypt(connection.apiKey),
|
|
61
|
-
this.deps.secretCipher.decrypt(connection.appKey),
|
|
62
|
-
]);
|
|
63
|
-
const client = new DatadogClient({ site: connection.site, apiKey, appKey }, { fetchImpl: this.deps.fetchImpl });
|
|
64
|
-
return { client, config };
|
|
65
|
-
}
|
|
66
|
-
/** A block's release-health config: its own, else its nearest ancestor frame's. */
|
|
67
|
-
async resolveConfig(workspaceId, blockId) {
|
|
68
|
-
let currentId = blockId;
|
|
69
|
-
// Walk up the parent chain (task → module → frame), bounded against cycles.
|
|
70
|
-
for (let hops = 0; currentId && hops < 5; hops++) {
|
|
71
|
-
const config = await this.deps.releaseHealthConfigRepository.getByBlock(workspaceId, currentId);
|
|
72
|
-
if (config)
|
|
73
|
-
return config;
|
|
74
|
-
const block = await this.deps.blockRepository.get(workspaceId, currentId);
|
|
75
|
-
currentId = block?.parentId ?? null;
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
async readSignals(client, config, since) {
|
|
80
|
-
const now = Date.now();
|
|
81
|
-
const fromTs = Math.floor(since / 1000);
|
|
82
|
-
const toTs = Math.floor(now / 1000);
|
|
83
|
-
const monitors = await Promise.all(config.monitorIds.map(async (id) => {
|
|
84
|
-
const m = await client.getMonitor(id);
|
|
85
|
-
// Attribute the alert to THIS release: a monitor already alerting before the
|
|
86
|
-
// release marker (`since`) is a pre-existing incident, not this PR's regression.
|
|
87
|
-
const state = mapMonitorState(m.overallState, { stateModifiedMs: m.stateModifiedMs, since });
|
|
88
|
-
return { kind: 'monitor', id, name: m.name, state };
|
|
89
|
-
}));
|
|
90
|
-
const slos = await Promise.all(config.sloIds.map(async (id) => {
|
|
91
|
-
const s = await client.getSloState(id, fromTs, toTs);
|
|
92
|
-
const state = mapSloState(s.sliValue, s.target);
|
|
93
|
-
const detail = s.sliValue !== null && s.target !== null
|
|
94
|
-
? `SLI ${s.sliValue.toFixed(2)} vs target ${s.target}`
|
|
95
|
-
: undefined;
|
|
96
|
-
return { kind: 'slo', id, name: s.name, state, detail };
|
|
97
|
-
}));
|
|
98
|
-
return [...monitors, ...slos];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=DatadogReleaseHealthProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatadogReleaseHealthProvider.js","sourceRoot":"","sources":["../../../src/modules/datadog/DatadogReleaseHealthProvider.ts"],"names":[],"mappings":"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"}
|