@exellix/exellix-jobs 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +100 -0
- package/dist/cli.js.map +1 -0
- package/dist/collections.d.ts +28 -0
- package/dist/collections.d.ts.map +1 -0
- package/dist/collections.js +2 -0
- package/dist/collections.js.map +1 -0
- package/dist/env.d.ts +17 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +38 -0
- package/dist/env.js.map +1 -0
- package/dist/http/health.d.ts +10 -0
- package/dist/http/health.d.ts.map +1 -0
- package/dist/http/health.js +20 -0
- package/dist/http/health.js.map +1 -0
- package/dist/http/server.d.ts +10 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +85 -0
- package/dist/http/server.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-matrix-tier.d.ts +6 -0
- package/dist/memory-matrix-tier.d.ts.map +1 -0
- package/dist/memory-matrix-tier.js +20 -0
- package/dist/memory-matrix-tier.js.map +1 -0
- package/dist/metrics.d.ts +13 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +57 -0
- package/dist/metrics.js.map +1 -0
- package/dist/open-matrix-persistence.d.ts +7 -0
- package/dist/open-matrix-persistence.d.ts.map +1 -0
- package/dist/open-matrix-persistence.js +29 -0
- package/dist/open-matrix-persistence.js.map +1 -0
- package/dist/persistence-env.d.ts +7 -0
- package/dist/persistence-env.d.ts.map +1 -0
- package/dist/persistence-env.js +14 -0
- package/dist/persistence-env.js.map +1 -0
- package/dist/runtime-matrix-tier.d.ts +8 -0
- package/dist/runtime-matrix-tier.d.ts.map +1 -0
- package/dist/runtime-matrix-tier.js +57 -0
- package/dist/runtime-matrix-tier.js.map +1 -0
- package/dist/worker/continuous-loop.d.ts +22 -0
- package/dist/worker/continuous-loop.d.ts.map +1 -0
- package/dist/worker/continuous-loop.js +73 -0
- package/dist/worker/continuous-loop.js.map +1 -0
- package/dist/worker/cycle-state.d.ts +22 -0
- package/dist/worker/cycle-state.d.ts.map +1 -0
- package/dist/worker/cycle-state.js +25 -0
- package/dist/worker/cycle-state.js.map +1 -0
- package/dist/worker/discovery.d.ts +32 -0
- package/dist/worker/discovery.d.ts.map +1 -0
- package/dist/worker/discovery.js +104 -0
- package/dist/worker/discovery.js.map +1 -0
- package/dist/worker/matrix-worker.d.ts +57 -0
- package/dist/worker/matrix-worker.d.ts.map +1 -0
- package/dist/worker/matrix-worker.js +103 -0
- package/dist/worker/matrix-worker.js.map +1 -0
- package/dist/worker/wrap-execute-graph.d.ts +14 -0
- package/dist/worker/wrap-execute-graph.d.ts.map +1 -0
- package/dist/worker/wrap-execute-graph.js +61 -0
- package/dist/worker/wrap-execute-graph.js.map +1 -0
- package/dist/xmemory-matrix-tier.d.ts +7 -0
- package/dist/xmemory-matrix-tier.d.ts.map +1 -0
- package/dist/xmemory-matrix-tier.js +65 -0
- package/dist/xmemory-matrix-tier.js.map +1 -0
- package/docs/execution-matrix-worker-service.md +8 -0
- package/docs/openapi.yaml +122 -0
- package/docs/specs.md +305 -0
- package/docs/troubleshooting.md +252 -0
- package/examples/graph-engine-stub.mjs +40 -0
- package/examples/host-bootstrap.mjs +74 -0
- package/package.json +67 -0
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Counter, Histogram, Registry } from 'prom-client';
|
|
2
|
+
export function createJobsMetrics(registry = new Registry()) {
|
|
3
|
+
const matrixClaimsStartedTotal = new Counter({
|
|
4
|
+
name: 'matrix_claims_started_total',
|
|
5
|
+
help: 'Matrix claims started (before executeGraph).',
|
|
6
|
+
labelNames: ['graph_id', 'matrix_catalog_id'],
|
|
7
|
+
registers: [registry],
|
|
8
|
+
});
|
|
9
|
+
const matrixClaimsCompletedTotal = new Counter({
|
|
10
|
+
name: 'matrix_claims_completed_total',
|
|
11
|
+
help: 'Matrix claims completed with graph-engine terminal status.',
|
|
12
|
+
labelNames: ['graph_id', 'status'],
|
|
13
|
+
registers: [registry],
|
|
14
|
+
});
|
|
15
|
+
const matrixClaimsFailedTotal = new Counter({
|
|
16
|
+
name: 'matrix_claims_failed_total',
|
|
17
|
+
help: 'Matrix claims failed (executor throw or failure path).',
|
|
18
|
+
labelNames: ['graph_id'],
|
|
19
|
+
registers: [registry],
|
|
20
|
+
});
|
|
21
|
+
const matrixRowsMaterializedTotal = new Counter({
|
|
22
|
+
name: 'matrix_rows_materialized_total',
|
|
23
|
+
help: 'Runtime rows inserted by matrix materializer.',
|
|
24
|
+
labelNames: ['matrix_catalog_id'],
|
|
25
|
+
registers: [registry],
|
|
26
|
+
});
|
|
27
|
+
const matrixWorkerIdleSecondsTotal = new Counter({
|
|
28
|
+
name: 'matrix_worker_idle_seconds_total',
|
|
29
|
+
help: 'Approximate idle time in empty-pass cycles (seconds).',
|
|
30
|
+
labelNames: ['matrix_catalog_id'],
|
|
31
|
+
registers: [registry],
|
|
32
|
+
});
|
|
33
|
+
const matrixWorkerCyclesTotal = new Counter({
|
|
34
|
+
name: 'matrix_worker_cycles_total',
|
|
35
|
+
help: 'Completed runMatrixCycle invocations.',
|
|
36
|
+
labelNames: ['matrix_catalog_id', 'empty'],
|
|
37
|
+
registers: [registry],
|
|
38
|
+
});
|
|
39
|
+
const executeGraphDurationSeconds = new Histogram({
|
|
40
|
+
name: 'matrix_execute_graph_duration_seconds',
|
|
41
|
+
help: 'executeGraph wall time (seconds).',
|
|
42
|
+
labelNames: ['graph_id'],
|
|
43
|
+
buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 15, 60, 300],
|
|
44
|
+
registers: [registry],
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
registry,
|
|
48
|
+
matrixClaimsStartedTotal,
|
|
49
|
+
matrixClaimsCompletedTotal,
|
|
50
|
+
matrixClaimsFailedTotal,
|
|
51
|
+
matrixRowsMaterializedTotal,
|
|
52
|
+
matrixWorkerIdleSecondsTotal,
|
|
53
|
+
matrixWorkerCyclesTotal,
|
|
54
|
+
executeGraphDurationSeconds,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAa3D,MAAM,UAAU,iBAAiB,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE;IACzD,MAAM,wBAAwB,GAAG,IAAI,OAAO,CAAC;QAC3C,IAAI,EAAE,6BAA6B;QACnC,IAAI,EAAE,8CAA8C;QACpD,UAAU,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC;QAC7C,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAC;QAC7C,IAAI,EAAE,+BAA+B;QACrC,IAAI,EAAE,4DAA4D;QAClE,UAAU,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;QAClC,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,uBAAuB,GAAG,IAAI,OAAO,CAAC;QAC1C,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,wDAAwD;QAC9D,UAAU,EAAE,CAAC,UAAU,CAAC;QACxB,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,2BAA2B,GAAG,IAAI,OAAO,CAAC;QAC9C,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE,+CAA+C;QACrD,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,4BAA4B,GAAG,IAAI,OAAO,CAAC;QAC/C,IAAI,EAAE,kCAAkC;QACxC,IAAI,EAAE,uDAAuD;QAC7D,UAAU,EAAE,CAAC,mBAAmB,CAAC;QACjC,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,uBAAuB,GAAG,IAAI,OAAO,CAAC;QAC1C,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,uCAAuC;QAC7C,UAAU,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC;QAC1C,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,2BAA2B,GAAG,IAAI,SAAS,CAAC;QAChD,IAAI,EAAE,uCAAuC;QAC7C,IAAI,EAAE,mCAAmC;QACzC,UAAU,EAAE,CAAC,UAAU,CAAC;QACxB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACvD,SAAS,EAAE,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,OAAO;QACL,QAAQ;QACR,wBAAwB;QACxB,0BAA0B;QAC1B,uBAAuB;QACvB,2BAA2B;QAC3B,4BAA4B;QAC5B,uBAAuB;QACvB,2BAA2B;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExellixMatrixPersistenceHandles, OpenExellixMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
/**
|
|
3
|
+
* Preferred persistence opener: {@link createExellixMatrixDataTier} from `@exellix/exellix-runtime` (≥ 3.1),
|
|
4
|
+
* otherwise legacy runtime xronox factories when {@link OpenExellixMatrixPersistenceOptions.fallbackToRuntimeFactories} is enabled.
|
|
5
|
+
*/
|
|
6
|
+
export declare function openExellixMatrixPersistence(options?: OpenExellixMatrixPersistenceOptions): Promise<ExellixMatrixPersistenceHandles>;
|
|
7
|
+
//# sourceMappingURL=open-matrix-persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-matrix-persistence.d.ts","sourceRoot":"","sources":["../src/open-matrix-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC;AAa7G;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,+BAA+B,CAAC,CAe1C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
2
|
+
import { openExellixMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
3
|
+
import { openExellixMatrixPersistenceFromXmemoryStore } from './xmemory-matrix-tier.js';
|
|
4
|
+
function isMatrixDataTierFactoryUnavailable(err) {
|
|
5
|
+
return (err instanceof Error &&
|
|
6
|
+
err.message.includes('createExellixMatrixDataTier') &&
|
|
7
|
+
(err.message.includes('not exported') || err.message.includes('not available')));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Preferred persistence opener: {@link createExellixMatrixDataTier} from `@exellix/exellix-runtime` (≥ 3.1),
|
|
11
|
+
* otherwise legacy runtime xronox factories when {@link OpenExellixMatrixPersistenceOptions.fallbackToRuntimeFactories} is enabled.
|
|
12
|
+
*/
|
|
13
|
+
export async function openExellixMatrixPersistence(options = {}) {
|
|
14
|
+
const resolved = resolveMatrixPersistenceOptionsFromEnv(options);
|
|
15
|
+
const fallback = resolved.fallbackToRuntimeFactories !== false;
|
|
16
|
+
try {
|
|
17
|
+
return await openExellixMatrixPersistenceFromXmemoryStore(resolved);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (!fallback) {
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
if (!isMatrixDataTierFactoryUnavailable(err)) {
|
|
24
|
+
throw err;
|
|
25
|
+
}
|
|
26
|
+
return openExellixMatrixPersistenceFromRuntimeFactories(resolved);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=open-matrix-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-matrix-persistence.js","sourceRoot":"","sources":["../src/open-matrix-persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,gDAAgD,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,4CAA4C,EAAE,MAAM,0BAA0B,CAAC;AAExF,SAAS,kCAAkC,CAAC,GAAY;IACtD,OAAO,CACL,GAAG,YAAY,KAAK;QACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACnD,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAChF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,UAA+C,EAAE;IAEjD,MAAM,QAAQ,GAAG,sCAAsC,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,0BAA0B,KAAK,KAAK,CAAC;IAE/D,IAAI,CAAC;QACH,OAAO,MAAM,4CAA4C,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,gDAAgD,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OpenExellixMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
import { type JobsEnv } from './env.js';
|
|
3
|
+
/**
|
|
4
|
+
* Merges {@link loadJobsEnv} database names (and optional caller overrides) into persistence opener options.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveMatrixPersistenceOptionsFromEnv(overrides?: OpenExellixMatrixPersistenceOptions, env?: JobsEnv): OpenExellixMatrixPersistenceOptions;
|
|
7
|
+
//# sourceMappingURL=persistence-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-env.d.ts","sourceRoot":"","sources":["../src/persistence-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAErD;;GAEG;AACH,wBAAgB,sCAAsC,CACpD,SAAS,GAAE,mCAAwC,EACnD,GAAG,GAAE,OAAuB,GAC3B,mCAAmC,CAQrC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { loadJobsEnv } from './env.js';
|
|
2
|
+
/**
|
|
3
|
+
* Merges {@link loadJobsEnv} database names (and optional caller overrides) into persistence opener options.
|
|
4
|
+
*/
|
|
5
|
+
export function resolveMatrixPersistenceOptionsFromEnv(overrides = {}, env = loadJobsEnv()) {
|
|
6
|
+
const mongoUri = overrides.mongoUri ?? (process.env.MONGO_URI?.trim() || undefined);
|
|
7
|
+
return {
|
|
8
|
+
...overrides,
|
|
9
|
+
...(mongoUri !== undefined ? { mongoUri } : {}),
|
|
10
|
+
executionDb: overrides.executionDb ?? env.executionDb,
|
|
11
|
+
configDb: overrides.configDb ?? env.configDb,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=persistence-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-env.js","sourceRoot":"","sources":["../src/persistence-env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAgB,MAAM,UAAU,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,sCAAsC,CACpD,YAAiD,EAAE,EACnD,MAAe,WAAW,EAAE;IAE5B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;IACpF,OAAO;QACL,GAAG,SAAS;QACZ,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW;QACrD,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExellixMatrixPersistenceHandles, OpenExellixMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
/**
|
|
3
|
+
* Opens matrix persistence via legacy `@exellix/exellix-runtime` xronox factories when
|
|
4
|
+
* {@link createExellixMatrixDataTier} is unavailable. Prefer {@link openExellixMatrixPersistenceFromXmemoryStore}.
|
|
5
|
+
* No direct `@x12i/xronox-store` import in jobs.
|
|
6
|
+
*/
|
|
7
|
+
export declare function openExellixMatrixPersistenceFromRuntimeFactories(options?: OpenExellixMatrixPersistenceOptions): Promise<ExellixMatrixPersistenceHandles>;
|
|
8
|
+
//# sourceMappingURL=runtime-matrix-tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-matrix-tier.d.ts","sourceRoot":"","sources":["../src/runtime-matrix-tier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC;AAK7G;;;;GAIG;AACH,wBAAsB,gDAAgD,CACpE,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,+BAA+B,CAAC,CAmE1C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
2
|
+
/**
|
|
3
|
+
* Opens matrix persistence via legacy `@exellix/exellix-runtime` xronox factories when
|
|
4
|
+
* {@link createExellixMatrixDataTier} is unavailable. Prefer {@link openExellixMatrixPersistenceFromXmemoryStore}.
|
|
5
|
+
* No direct `@x12i/xronox-store` import in jobs.
|
|
6
|
+
*/
|
|
7
|
+
export async function openExellixMatrixPersistenceFromRuntimeFactories(options = {}) {
|
|
8
|
+
const resolved = resolveMatrixPersistenceOptionsFromEnv(options);
|
|
9
|
+
const mongoUri = resolved.mongoUri ?? process.env.MONGO_URI?.trim();
|
|
10
|
+
if (!mongoUri) {
|
|
11
|
+
throw new Error('@exellix/exellix-jobs: MONGO_URI is required to open matrix persistence via runtime factories.');
|
|
12
|
+
}
|
|
13
|
+
const runtime = (await import('@exellix/exellix-runtime'));
|
|
14
|
+
const xronox = (await import('@exellix/exellix-runtime/internal/xronox-matrix'));
|
|
15
|
+
const { createExecutionMatrixRuntimeFromXronox, createExellixConfigStoreFromXronox, } = xronox;
|
|
16
|
+
const { executionMatrixRowsCollectionDef, executionMatrixFailuresCollectionDef, executionMatrixSnapshotsCollectionDef, exellixMatrixConfigsCollectionDef, exellixGraphConfigsCollectionDef, } = runtime;
|
|
17
|
+
const exec = await createExecutionMatrixRuntimeFromXronox({
|
|
18
|
+
mongoUri,
|
|
19
|
+
mongoDb: resolved.executionDb,
|
|
20
|
+
serializeClaims: true,
|
|
21
|
+
});
|
|
22
|
+
const cfg = await createExellixConfigStoreFromXronox({
|
|
23
|
+
mongoUri,
|
|
24
|
+
mongoDb: resolved.configDb,
|
|
25
|
+
});
|
|
26
|
+
const rows = exec.store.collection(executionMatrixRowsCollectionDef().name);
|
|
27
|
+
const failures = exec.store.collection(executionMatrixFailuresCollectionDef().name);
|
|
28
|
+
const snapshots = exec.store.collection(executionMatrixSnapshotsCollectionDef().name);
|
|
29
|
+
const matrices = cfg.store.collection(exellixMatrixConfigsCollectionDef().name);
|
|
30
|
+
const graphs = cfg.store.collection(exellixGraphConfigsCollectionDef().name);
|
|
31
|
+
let closed = false;
|
|
32
|
+
const close = async () => {
|
|
33
|
+
if (closed) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
closed = true;
|
|
37
|
+
await exec.store.close().catch(() => undefined);
|
|
38
|
+
await cfg.store.close().catch(() => undefined);
|
|
39
|
+
await exec.closeMongoDriverPassThrough?.().catch(() => undefined);
|
|
40
|
+
await cfg.closeMongoDriverPassThrough?.().catch(() => undefined);
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
rows,
|
|
44
|
+
failures,
|
|
45
|
+
snapshots,
|
|
46
|
+
matrices,
|
|
47
|
+
graphs,
|
|
48
|
+
close,
|
|
49
|
+
probe: {
|
|
50
|
+
executionStore: exec.store,
|
|
51
|
+
configStore: cfg.store,
|
|
52
|
+
executionMongoUri: mongoUri,
|
|
53
|
+
configMongoUri: mongoUri,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=runtime-matrix-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-matrix-tier.js","sourceRoot":"","sources":["../src/runtime-matrix-tier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAI9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gDAAgD,CACpE,UAA+C,EAAE;IAEjD,MAAM,QAAQ,GAAG,sCAAsC,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAA8C,CAAC;IACxG,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAC1B,iDAAiD,CAClD,CAA+B,CAAC;IACjC,MAAM,EACJ,sCAAsC,EACtC,kCAAkC,GACnC,GAAG,MAAM,CAAC;IACX,MAAM,EACJ,gCAAgC,EAChC,oCAAoC,EACpC,qCAAqC,EACrC,iCAAiC,EACjC,gCAAgC,GACjC,GAAG,OAAO,CAAC;IAEZ,MAAM,IAAI,GAAG,MAAM,sCAAsC,CAAC;QACxD,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,WAAW;QAC7B,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,kCAAkC,CAAC;QACnD,QAAQ;QACR,OAAO,EAAE,QAAQ,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gCAAgC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,oCAAoC,EAAE,CAAC,IAAI,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,qCAAqC,EAAE,CAAC,IAAI,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,gCAAgC,EAAE,CAAC,IAAI,CAAC,CAAC;IAE7E,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;QACN,KAAK;QACL,KAAK,EAAE;YACL,cAAc,EAAE,IAAI,CAAC,KAAK;YAC1B,WAAW,EAAE,GAAG,CAAC,KAAK;YACtB,iBAAiB,EAAE,QAAQ;YAC3B,cAAc,EAAE,QAAQ;SACzB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ConfigDrivenDispatchDeps, type RunMatrixContinuouslyByCatalogIdOptions } from '@exellix/exellix-runtime';
|
|
2
|
+
import type { JobsMetrics } from '../metrics.js';
|
|
3
|
+
import type { MatrixCycleState } from './cycle-state.js';
|
|
4
|
+
export type RunMatrixContinuouslyByCatalogIdWithMetricsOptions = RunMatrixContinuouslyByCatalogIdOptions & {
|
|
5
|
+
onCycleComplete?: (info: {
|
|
6
|
+
matrixCatalogId: string;
|
|
7
|
+
matrixItemId: string;
|
|
8
|
+
matrixRunId?: string;
|
|
9
|
+
emptyPass: boolean;
|
|
10
|
+
cyclesRun: number;
|
|
11
|
+
}) => void;
|
|
12
|
+
cycleState?: MatrixCycleState;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Same behavior as {@link runMatrixContinuouslyByCatalogId} from `@exellix/exellix-runtime`, plus Prometheus
|
|
16
|
+
* counters for cycles, materialized rows, and idle sleep seconds on empty passes.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runMatrixContinuouslyByCatalogIdWithMetrics(deps: ConfigDrivenDispatchDeps, opts: RunMatrixContinuouslyByCatalogIdWithMetricsOptions, metrics?: JobsMetrics): Promise<{
|
|
19
|
+
cyclesRun: number;
|
|
20
|
+
reason: 'aborted' | 'maxCycles' | 'event-source';
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=continuous-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuous-loop.d.ts","sourceRoot":"","sources":["../../src/worker/continuous-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,wBAAwB,EAC7B,KAAK,uCAAuC,EAC7C,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,kDAAkD,GAAG,uCAAuC,GAAG;IACzG,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;IACX,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,2CAA2C,CAC/D,IAAI,EAAE,wBAAwB,EAC9B,IAAI,EAAE,kDAAkD,EACxD,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,cAAc,CAAA;CAAE,CAAC,CAsElF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { resolveMatrixExecutionConfig, resolvePollWhenEmptySeconds, runMatrixCycle, shouldLoopDriveMatrix, sleepWithAbort, } from '@exellix/exellix-runtime';
|
|
2
|
+
/**
|
|
3
|
+
* Same behavior as {@link runMatrixContinuouslyByCatalogId} from `@exellix/exellix-runtime`, plus Prometheus
|
|
4
|
+
* counters for cycles, materialized rows, and idle sleep seconds on empty passes.
|
|
5
|
+
*/
|
|
6
|
+
export async function runMatrixContinuouslyByCatalogIdWithMetrics(deps, opts, metrics) {
|
|
7
|
+
const refresh = opts.refreshConfigPerCycle ?? true;
|
|
8
|
+
let { effective, graphRecords } = await resolveMatrixExecutionConfig(deps.configStore, opts.matrixCatalogId);
|
|
9
|
+
if (!shouldLoopDriveMatrix(effective.payload)) {
|
|
10
|
+
return { cyclesRun: 0, reason: 'event-source' };
|
|
11
|
+
}
|
|
12
|
+
const maxCycles = opts.maxCycles ?? Number.POSITIVE_INFINITY;
|
|
13
|
+
let cyclesRun = 0;
|
|
14
|
+
const matrixCatalogId = opts.matrixCatalogId;
|
|
15
|
+
while (!opts.signal.aborted) {
|
|
16
|
+
if (cyclesRun >= maxCycles) {
|
|
17
|
+
return { cyclesRun, reason: 'maxCycles' };
|
|
18
|
+
}
|
|
19
|
+
if (refresh && cyclesRun > 0) {
|
|
20
|
+
({ effective, graphRecords } = await resolveMatrixExecutionConfig(deps.configStore, opts.matrixCatalogId));
|
|
21
|
+
if (!shouldLoopDriveMatrix(effective.payload)) {
|
|
22
|
+
return { cyclesRun, reason: 'event-source' };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const cycleOpts = {
|
|
26
|
+
matrixCatalogId: opts.matrixCatalogId,
|
|
27
|
+
matrixItemId: opts.matrixItemId,
|
|
28
|
+
...(opts.matrixRunId !== undefined ? { matrixRunId: opts.matrixRunId } : {}),
|
|
29
|
+
payload: effective.payload,
|
|
30
|
+
graphRecords,
|
|
31
|
+
...(opts.inputRows ? { inputRows: opts.inputRows } : {}),
|
|
32
|
+
...(opts.snapshot ? { snapshot: opts.snapshot } : {}),
|
|
33
|
+
...(opts.jobId !== undefined ? { jobId: opts.jobId } : {}),
|
|
34
|
+
...(opts.debugMode !== undefined ? { debugMode: opts.debugMode } : {}),
|
|
35
|
+
...(opts.executeOverrides ? { executeOverrides: opts.executeOverrides } : {}),
|
|
36
|
+
};
|
|
37
|
+
const cycle = await runMatrixCycle(deps, cycleOpts);
|
|
38
|
+
cyclesRun += 1;
|
|
39
|
+
opts.onCycleComplete?.({
|
|
40
|
+
matrixCatalogId: opts.matrixCatalogId,
|
|
41
|
+
matrixItemId: opts.matrixItemId,
|
|
42
|
+
...(opts.matrixRunId !== undefined ? { matrixRunId: opts.matrixRunId } : {}),
|
|
43
|
+
emptyPass: cycle.emptyPass,
|
|
44
|
+
cyclesRun,
|
|
45
|
+
});
|
|
46
|
+
opts.cycleState?.recordCycle({
|
|
47
|
+
matrixCatalogId: opts.matrixCatalogId,
|
|
48
|
+
matrixItemId: opts.matrixItemId,
|
|
49
|
+
...(opts.matrixRunId !== undefined ? { matrixRunId: opts.matrixRunId } : {}),
|
|
50
|
+
emptyPass: cycle.emptyPass,
|
|
51
|
+
cyclesRun,
|
|
52
|
+
});
|
|
53
|
+
metrics?.matrixWorkerCyclesTotal.inc({
|
|
54
|
+
matrix_catalog_id: matrixCatalogId,
|
|
55
|
+
empty: String(cycle.emptyPass),
|
|
56
|
+
});
|
|
57
|
+
if (cycle.materialized > 0) {
|
|
58
|
+
metrics?.matrixRowsMaterializedTotal.inc({ matrix_catalog_id: matrixCatalogId }, cycle.materialized);
|
|
59
|
+
}
|
|
60
|
+
if (opts.signal.aborted) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (cycle.emptyPass) {
|
|
64
|
+
const sleepSeconds = opts.pollWhenEmptySecondsOverride ?? resolvePollWhenEmptySeconds(effective.payload.dataSource);
|
|
65
|
+
if (sleepSeconds > 0) {
|
|
66
|
+
metrics?.matrixWorkerIdleSecondsTotal.inc({ matrix_catalog_id: matrixCatalogId }, sleepSeconds);
|
|
67
|
+
await sleepWithAbort(sleepSeconds * 1000, opts.signal);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { cyclesRun, reason: 'aborted' };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=continuous-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuous-loop.js","sourceRoot":"","sources":["../../src/worker/continuous-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type CycleLoopSnapshot = {
|
|
2
|
+
matrixCatalogId: string;
|
|
3
|
+
matrixItemId: string;
|
|
4
|
+
matrixRunId?: string;
|
|
5
|
+
lastCycleAt: string;
|
|
6
|
+
lastCycleEmpty: boolean;
|
|
7
|
+
cyclesRun: number;
|
|
8
|
+
};
|
|
9
|
+
export declare class MatrixCycleState {
|
|
10
|
+
private readonly loops;
|
|
11
|
+
recordCycle(info: {
|
|
12
|
+
matrixCatalogId: string;
|
|
13
|
+
matrixItemId: string;
|
|
14
|
+
matrixRunId?: string;
|
|
15
|
+
emptyPass: boolean;
|
|
16
|
+
cyclesRun: number;
|
|
17
|
+
}): void;
|
|
18
|
+
snapshot(filter?: {
|
|
19
|
+
matrixCatalogId?: string;
|
|
20
|
+
}): CycleLoopSnapshot[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cycle-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cycle-state.d.ts","sourceRoot":"","sources":["../../src/worker/cycle-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAE9D,WAAW,CAAC,IAAI,EAAE;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAYR,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,EAAE;CAOrE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function loopKey(matrixCatalogId, matrixItemId, matrixRunId) {
|
|
2
|
+
return `${matrixCatalogId}\0${matrixItemId}\0${matrixRunId ?? ''}`;
|
|
3
|
+
}
|
|
4
|
+
export class MatrixCycleState {
|
|
5
|
+
loops = new Map();
|
|
6
|
+
recordCycle(info) {
|
|
7
|
+
const key = loopKey(info.matrixCatalogId, info.matrixItemId, info.matrixRunId);
|
|
8
|
+
this.loops.set(key, {
|
|
9
|
+
matrixCatalogId: info.matrixCatalogId,
|
|
10
|
+
matrixItemId: info.matrixItemId,
|
|
11
|
+
...(info.matrixRunId !== undefined ? { matrixRunId: info.matrixRunId } : {}),
|
|
12
|
+
lastCycleAt: new Date().toISOString(),
|
|
13
|
+
lastCycleEmpty: info.emptyPass,
|
|
14
|
+
cyclesRun: info.cyclesRun,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
snapshot(filter) {
|
|
18
|
+
const rows = [...this.loops.values()];
|
|
19
|
+
if (!filter?.matrixCatalogId) {
|
|
20
|
+
return rows;
|
|
21
|
+
}
|
|
22
|
+
return rows.filter((r) => r.matrixCatalogId === filter.matrixCatalogId);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=cycle-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cycle-state.js","sourceRoot":"","sources":["../../src/worker/cycle-state.ts"],"names":[],"mappings":"AASA,SAAS,OAAO,CAAC,eAAuB,EAAE,YAAoB,EAAE,WAAoB;IAClF,OAAO,GAAG,eAAe,KAAK,YAAY,KAAK,WAAW,IAAI,EAAE,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,gBAAgB;IACV,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE9D,WAAW,CAAC,IAMX;QACC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,cAAc,EAAE,IAAI,CAAC,SAAS;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,MAAqC;QAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1E,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ExellixConfigStore, type GraphConfigRecord, type GraphOperationalState, type GraphPublicationStatus } from '@exellix/exellix-runtime';
|
|
2
|
+
export declare function graphIsSchedulableCandidate(g: GraphConfigRecord): boolean;
|
|
3
|
+
export type MatrixAssignment = {
|
|
4
|
+
matrixCatalogId: string;
|
|
5
|
+
/** Catalog item identity for run-loop; defaults to `matrixCatalogId` when not supplied elsewhere. */
|
|
6
|
+
matrixItemId: string;
|
|
7
|
+
matrixRunId?: string;
|
|
8
|
+
/** Graph ids from the matrix payload that are schedulable candidates. */
|
|
9
|
+
graphIds: string[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Implements `docs/specs.md` §7: discover matrices whose payload references any Published/Ready|Running graph.
|
|
13
|
+
*/
|
|
14
|
+
export declare function discoverMatrixAssignments(configStore: ExellixConfigStore, opts?: {
|
|
15
|
+
matrixPageSize?: number;
|
|
16
|
+
graphListLimit?: number;
|
|
17
|
+
}): Promise<MatrixAssignment[]>;
|
|
18
|
+
export type GraphSummaryRow = {
|
|
19
|
+
graphId: string;
|
|
20
|
+
publicationStatus: GraphPublicationStatus;
|
|
21
|
+
operationalState: GraphOperationalState;
|
|
22
|
+
version: number;
|
|
23
|
+
matrixCatalogIds: string[];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Lists graphs with derived `matrixCatalogIds` (best-effort; walks matrix configs).
|
|
27
|
+
*/
|
|
28
|
+
export declare function listGraphSummaries(configStore: ExellixConfigStore, opts?: {
|
|
29
|
+
matrixPageSize?: number;
|
|
30
|
+
graphListLimit?: number;
|
|
31
|
+
}): Promise<GraphSummaryRow[]>;
|
|
32
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/worker/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAE5B,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAOzE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,qGAAqG;IACrG,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,kBAAkB,EAC/B,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkD7B;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,sBAAsB,CAAC;IAC1C,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,kBAAkB,EAC/B,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D,OAAO,CAAC,eAAe,EAAE,CAAC,CAqC5B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { assertGraphSchedulable, resolveGraphConfigOperationalView, } from '@exellix/exellix-runtime';
|
|
2
|
+
export function graphIsSchedulableCandidate(g) {
|
|
3
|
+
try {
|
|
4
|
+
assertGraphSchedulable(g);
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Implements `docs/specs.md` §7: discover matrices whose payload references any Published/Ready|Running graph.
|
|
13
|
+
*/
|
|
14
|
+
export async function discoverMatrixAssignments(configStore, opts) {
|
|
15
|
+
const graphPageSize = opts?.graphListLimit ?? 500;
|
|
16
|
+
const matrixPageSize = opts?.matrixPageSize ?? 200;
|
|
17
|
+
const schedulableGraphIds = new Set();
|
|
18
|
+
let gSkip = 0;
|
|
19
|
+
for (;;) {
|
|
20
|
+
const graphs = await configStore.graphs.list({ limit: graphPageSize, skip: gSkip });
|
|
21
|
+
for (const g of graphs) {
|
|
22
|
+
if (graphIsSchedulableCandidate(g)) {
|
|
23
|
+
schedulableGraphIds.add(g.graphId);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (graphs.length < graphPageSize) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
gSkip += graphs.length;
|
|
30
|
+
}
|
|
31
|
+
const byMatrix = new Map();
|
|
32
|
+
let mSkip = 0;
|
|
33
|
+
for (;;) {
|
|
34
|
+
const matrices = await configStore.matrices.list({ limit: matrixPageSize, skip: mSkip });
|
|
35
|
+
if (matrices.length === 0) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
for (const m of matrices) {
|
|
39
|
+
const graphsInMatrix = m.payload.graphs ?? [];
|
|
40
|
+
const schedulableInMatrix = graphsInMatrix.filter((id) => schedulableGraphIds.has(id));
|
|
41
|
+
if (schedulableInMatrix.length > 0) {
|
|
42
|
+
const matrixCatalogId = m.matrixCatalogId;
|
|
43
|
+
const existing = byMatrix.get(matrixCatalogId);
|
|
44
|
+
if (!existing) {
|
|
45
|
+
byMatrix.set(matrixCatalogId, {
|
|
46
|
+
matrixCatalogId,
|
|
47
|
+
matrixItemId: matrixCatalogId,
|
|
48
|
+
graphIds: [...schedulableInMatrix],
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const merged = new Set([...existing.graphIds, ...schedulableInMatrix]);
|
|
53
|
+
existing.graphIds = [...merged];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (matrices.length < matrixPageSize) {
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
mSkip += matrices.length;
|
|
61
|
+
}
|
|
62
|
+
return [...byMatrix.values()];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Lists graphs with derived `matrixCatalogIds` (best-effort; walks matrix configs).
|
|
66
|
+
*/
|
|
67
|
+
export async function listGraphSummaries(configStore, opts) {
|
|
68
|
+
const matrixPageSize = opts?.matrixPageSize ?? 200;
|
|
69
|
+
const graphToMatrices = new Map();
|
|
70
|
+
let mSkip = 0;
|
|
71
|
+
for (;;) {
|
|
72
|
+
const matrices = await configStore.matrices.list({ limit: matrixPageSize, skip: mSkip });
|
|
73
|
+
if (matrices.length === 0) {
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
for (const m of matrices) {
|
|
77
|
+
for (const gid of m.payload.graphs ?? []) {
|
|
78
|
+
let set = graphToMatrices.get(gid);
|
|
79
|
+
if (!set) {
|
|
80
|
+
set = new Set();
|
|
81
|
+
graphToMatrices.set(gid, set);
|
|
82
|
+
}
|
|
83
|
+
set.add(m.matrixCatalogId);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (matrices.length < matrixPageSize) {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
mSkip += matrices.length;
|
|
90
|
+
}
|
|
91
|
+
const limit = opts?.graphListLimit ?? 2000;
|
|
92
|
+
const graphs = await configStore.graphs.list({ limit, skip: 0 });
|
|
93
|
+
return graphs.map((g) => {
|
|
94
|
+
const eff = resolveGraphConfigOperationalView(g);
|
|
95
|
+
return {
|
|
96
|
+
graphId: g.graphId,
|
|
97
|
+
publicationStatus: eff.publicationStatus,
|
|
98
|
+
operationalState: eff.operationalState,
|
|
99
|
+
version: g.version,
|
|
100
|
+
matrixCatalogIds: [...(graphToMatrices.get(g.graphId) ?? [])].sort(),
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/worker/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createExecutionMatrixClaimPauseController, type ConfigDrivenDispatchDeps, type ExellixRuntimeConnectivityProbeOptions, type ExecutionMatrixRuntime, type ExellixConfigStore, type MatrixGraphExecutor, type MatrixGraphModelResolver, type MatrixSourceResolver } from '@exellix/exellix-runtime';
|
|
2
|
+
import type { ExellixMatrixPersistenceHandles } from '../collections.js';
|
|
3
|
+
import type { JobsMetrics } from '../metrics.js';
|
|
4
|
+
import { type CycleLoopSnapshot } from './cycle-state.js';
|
|
5
|
+
import { type MatrixAssignment } from './discovery.js';
|
|
6
|
+
export type { MatrixAssignment } from './discovery.js';
|
|
7
|
+
export type CreateMatrixWorkerOptions = {
|
|
8
|
+
persistence: ExellixMatrixPersistenceHandles;
|
|
9
|
+
executeGraph: MatrixGraphExecutor;
|
|
10
|
+
resolveGraphModel?: MatrixGraphModelResolver;
|
|
11
|
+
sourceResolver?: MatrixSourceResolver;
|
|
12
|
+
matrixActivix?: ConfigDrivenDispatchDeps['matrixActivix'];
|
|
13
|
+
matrixLogxer?: ConfigDrivenDispatchDeps['matrixLogxer'];
|
|
14
|
+
executeOverrides?: ConfigDrivenDispatchDeps['executeOverrides'];
|
|
15
|
+
runtimeScope?: ConfigDrivenDispatchDeps['runtimeScope'];
|
|
16
|
+
runtimeObjects?: ConfigDrivenDispatchDeps['runtimeObjects'];
|
|
17
|
+
maxConcurrentClaims?: number;
|
|
18
|
+
perGraphConcurrency?: Record<string, number>;
|
|
19
|
+
/** Maps to {@link ProcessMatrixClaimDeps.graphSchedulabilityRequireConfig}. */
|
|
20
|
+
graphSchedulabilityRequireConfig?: boolean;
|
|
21
|
+
/** Operator identity (`MATRIX_WORKER_ID`) surfaced in health and `/workers/status`. */
|
|
22
|
+
matrixWorkerId?: string;
|
|
23
|
+
metrics?: JobsMetrics;
|
|
24
|
+
};
|
|
25
|
+
export type MatrixWorkerStatus = {
|
|
26
|
+
matrixWorkerId?: string;
|
|
27
|
+
assignedMatrixCatalogIds: string[];
|
|
28
|
+
/** Spec §10.4 alias — graph ids from assigned matrices. */
|
|
29
|
+
assignedGraphIds: string[];
|
|
30
|
+
activeJobsByGraphId: Record<string, number>;
|
|
31
|
+
/** Spec §10.4 alias for {@link activeJobsByGraphId}. */
|
|
32
|
+
activeJobs: Record<string, number>;
|
|
33
|
+
maxConcurrency: number;
|
|
34
|
+
paused: boolean;
|
|
35
|
+
loops: CycleLoopSnapshot[];
|
|
36
|
+
};
|
|
37
|
+
export type MatrixWorker = {
|
|
38
|
+
readonly runtime: ExecutionMatrixRuntime;
|
|
39
|
+
readonly configStore: ExellixConfigStore;
|
|
40
|
+
readonly metrics: JobsMetrics;
|
|
41
|
+
readonly pauseController: ReturnType<typeof createExecutionMatrixClaimPauseController>;
|
|
42
|
+
readonly connectivityProbe?: ExellixRuntimeConnectivityProbeOptions;
|
|
43
|
+
getStatus: (filter?: {
|
|
44
|
+
matrixCatalogId?: string;
|
|
45
|
+
}) => MatrixWorkerStatus;
|
|
46
|
+
/**
|
|
47
|
+
* Starts one continuous loop per matrix assignment. When `assignments` is omitted, runs catalog discovery
|
|
48
|
+
* (`docs/specs.md` §7).
|
|
49
|
+
*/
|
|
50
|
+
startSupervised: (signal: AbortSignal, opts?: {
|
|
51
|
+
assignments?: MatrixAssignment[];
|
|
52
|
+
}) => Promise<void>;
|
|
53
|
+
close: () => Promise<void>;
|
|
54
|
+
};
|
|
55
|
+
export declare function createMatrixWorker(options: CreateMatrixWorkerOptions): Promise<MatrixWorker>;
|
|
56
|
+
export { discoverMatrixAssignments, listGraphSummaries } from './discovery.js';
|
|
57
|
+
//# sourceMappingURL=matrix-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix-worker.d.ts","sourceRoot":"","sources":["../../src/worker/matrix-worker.ts"],"names":[],"mappings":"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"}
|