@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/README.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# `@exellix/exellix-jobs`
|
|
2
|
+
|
|
3
|
+
Execution-matrix **worker** package: supervised `runMatrixContinuously` loops, operator HTTP (`/health`, `/metrics`, graph PATCH), and Prometheus metrics — wired to **`@exellix/exellix-runtime` ≥ 3.1** and **matrix persistence via `createExellixMatrixDataTier`** (legacy xronox-factory fallback optional).
|
|
4
|
+
|
|
5
|
+
Normative behavior is specified in [`docs/specs.md`](./docs/specs.md). [`docs/execution-matrix-worker-service.md`](./docs/execution-matrix-worker-service.md) is a short historical pointer. HTTP routes are cataloged in [`docs/openapi.yaml`](./docs/openapi.yaml). **Local issues (404 PATCH paths, tombstoned graphs, idle worker, …):** [`docs/troubleshooting.md`](./docs/troubleshooting.md).
|
|
6
|
+
|
|
7
|
+
## Graph execution input (record placement)
|
|
8
|
+
|
|
9
|
+
Peer contract for where the work-unit record goes on `executeGraph` and matrix runs: [`../exellix-runtime/docs/graph-execution-record-placement.md`](../exellix-runtime/docs/graph-execution-record-placement.md).
|
|
10
|
+
|
|
11
|
+
This worker **does not** call `executeGraph` itself. It passes your host `executeGraph` into `@exellix/exellix-runtime`, which builds `{ model, runtime }` and sets **`runtime.input = record.input`** at claim time.
|
|
12
|
+
|
|
13
|
+
| Phase | Where the record lives |
|
|
14
|
+
|-------|-------------------------|
|
|
15
|
+
| Materialize | `ExecutionMatrixRuntimeRecord.input` — flat field names (`subnetId`, `question`, …), not `input.raw` |
|
|
16
|
+
| Execute | `runtime.input` on the graph-engine request (same blob as row `input`) |
|
|
17
|
+
|
|
18
|
+
**Host responsibilities:** supply **`sourceResolver`** / **`inputRows`** so materialized row `input` uses **flat keys** matching `metadata.graphEntry.inputs` (requires **`@exellix/graph-engine` ≥ 5.16**). Wrap production executors with **`createMatrixExecuteGraphAdapter`** from runtime when adding `modelConfig` defaults (see [`examples/host-bootstrap.mjs`](./examples/host-bootstrap.mjs)).
|
|
19
|
+
|
|
20
|
+
## Constraints
|
|
21
|
+
|
|
22
|
+
- **No** direct `mongodb` or `@x12i/xronox-store` dependency in this package’s `package.json` or source imports.
|
|
23
|
+
- Matrix collections are **xronox-shaped handles** from **`createExellixMatrixDataTier`** on `@exellix/exellix-runtime`, or via `openExellixMatrixPersistence()` / `openExellixMatrixPersistenceFromRuntimeFactories()` as a bridge.
|
|
24
|
+
|
|
25
|
+
## Programmatic API
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { createExellixMatrixDataTier } from '@exellix/exellix-runtime';
|
|
29
|
+
import {
|
|
30
|
+
createMatrixWorker,
|
|
31
|
+
startMatrixWorkerHttp,
|
|
32
|
+
loadJobsEnv,
|
|
33
|
+
} from '@exellix/exellix-jobs';
|
|
34
|
+
|
|
35
|
+
const env = loadJobsEnv();
|
|
36
|
+
const tier = await createExellixMatrixDataTier({
|
|
37
|
+
mongoUri: process.env.MONGO_URI,
|
|
38
|
+
executionDb: env.executionDb,
|
|
39
|
+
configDb: env.configDb,
|
|
40
|
+
});
|
|
41
|
+
const persistence = {
|
|
42
|
+
rows: tier.rows,
|
|
43
|
+
failures: tier.failures,
|
|
44
|
+
snapshots: tier.snapshots,
|
|
45
|
+
matrices: tier.matrices,
|
|
46
|
+
graphs: tier.graphs,
|
|
47
|
+
close: () => tier.close(),
|
|
48
|
+
...(tier.probe ? { probe: tier.probe } : {}),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const worker = await createMatrixWorker({
|
|
52
|
+
persistence,
|
|
53
|
+
matrixWorkerId: env.matrixWorkerId,
|
|
54
|
+
executeGraph: graphRuntime.executeGraph.bind(graphRuntime),
|
|
55
|
+
resolveGraphModel: async ({ graphId }) => { /* … */ },
|
|
56
|
+
sourceResolver,
|
|
57
|
+
graphSchedulabilityRequireConfig: env.graphSchedulabilityStrict,
|
|
58
|
+
maxConcurrentClaims: env.maxConcurrentClaims,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const ac = new AbortController();
|
|
62
|
+
void worker.startSupervised(ac.signal);
|
|
63
|
+
await startMatrixWorkerHttp({ worker, env: loadJobsEnv() });
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## CLI
|
|
67
|
+
|
|
68
|
+
`exellix-jobs serve` loads an application bootstrap module so graph-engine wiring stays in the host:
|
|
69
|
+
|
|
70
|
+
- Set **`EXELLIX_JOBS_HOST_BOOTSTRAP`** to an absolute path of an ESM file whose **default export** is an `async function` returning `{ workerOptions }` (see `CreateMatrixWorkerOptions`).
|
|
71
|
+
- See [`examples/host-bootstrap.mjs`](./examples/host-bootstrap.mjs) for **`createExellixMatrixDataTier`** + env wiring; set **`EXELLIX_JOBS_GRAPH_ENGINE_BOOTSTRAP`** for `executeGraph` / `resolveGraphModel`.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run jobs:serve
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Operator routes use suffix paths — e.g. `PATCH /v1/graphs/{graphId}/operational`, not `PATCH /v1/graphs/{graphId}`. See [`docs/troubleshooting.md`](./docs/troubleshooting.md).
|
|
78
|
+
|
|
79
|
+
Optional: install `@x12i/env` next to this package for `.env` loading via dynamic import in the CLI.
|
|
80
|
+
|
|
81
|
+
## Environment
|
|
82
|
+
|
|
83
|
+
See `docs/specs.md` §12. Implemented keys include:
|
|
84
|
+
|
|
85
|
+
| Variable | Purpose |
|
|
86
|
+
|----------|---------|
|
|
87
|
+
| `PORT` | HTTP listen port |
|
|
88
|
+
| `JOBS_HTTP_PREFIX` | Route prefix (default `/v1`) |
|
|
89
|
+
| `MATRIX_WORKER_ID` | Identity in `/health` and `/workers/status` |
|
|
90
|
+
| `execution_db` / `config_db` | Persistence DB names |
|
|
91
|
+
| `EXELLIX_JOBS_MAX_CONCURRENT_CLAIMS` | Global parallelism |
|
|
92
|
+
| `EXELLIX_JOBS_GRAPH_SCHEDULABILITY_STRICT` | Schedulability flag |
|
|
93
|
+
| `EXELLIX_JOBS_HTTP_ENABLED` | Start HTTP server |
|
|
94
|
+
| `EXELLIX_JOBS_API_KEY` | Mutating HTTP routes |
|
|
95
|
+
| `EXELLIX_JOBS_ACTIVIX_SCHEDULER_PROBE` | Activix lane on dependency probe |
|
|
96
|
+
|
|
97
|
+
## HA note
|
|
98
|
+
|
|
99
|
+
Multiple replicas claiming the same matrix without coordination can double-execute; see `docs/specs.md` §15.
|
|
100
|
+
|
|
101
|
+
## Read tier (entity + graph history)
|
|
102
|
+
|
|
103
|
+
Job counts, slot status, and execution output for dashboards live in **`@exellix/exellix-matrix-read`** (sibling package) — not in this worker. Use it from BFF/Studio; keep this package for claim/execute only.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAG/F,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,yBAAyB,CAAC;CAC1C,CAAC"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
4
|
+
import { loadJobsEnv } from './env.js';
|
|
5
|
+
import { createMatrixWorker } from './worker/matrix-worker.js';
|
|
6
|
+
import { startMatrixWorkerHttp } from './http/server.js';
|
|
7
|
+
async function loadDotenvIfAvailable() {
|
|
8
|
+
const registerPath = '@x12i/env/register';
|
|
9
|
+
await import(registerPath).catch(() => undefined);
|
|
10
|
+
}
|
|
11
|
+
function defaultHostBootstrapPath() {
|
|
12
|
+
return join(dirname(fileURLToPath(import.meta.url)), '..', 'examples', 'host-bootstrap.mjs');
|
|
13
|
+
}
|
|
14
|
+
async function loadHostBootstrap() {
|
|
15
|
+
const p = process.env.EXELLIX_JOBS_HOST_BOOTSTRAP ?? defaultHostBootstrapPath();
|
|
16
|
+
if (!process.env.EXELLIX_JOBS_HOST_BOOTSTRAP) {
|
|
17
|
+
console.error(`@exellix/exellix-jobs: using default host bootstrap ${p}`);
|
|
18
|
+
}
|
|
19
|
+
const href = p.startsWith('file:') ? p : pathToFileURL(resolve(p)).href;
|
|
20
|
+
const mod = (await import(href));
|
|
21
|
+
if (typeof mod.default !== 'function') {
|
|
22
|
+
throw new Error('Host bootstrap module must default-export an async function.');
|
|
23
|
+
}
|
|
24
|
+
return mod.default;
|
|
25
|
+
}
|
|
26
|
+
function mergeWorkerOptionsFromEnv(options) {
|
|
27
|
+
const env = loadJobsEnv();
|
|
28
|
+
return {
|
|
29
|
+
...options,
|
|
30
|
+
...(options.matrixWorkerId === undefined && env.matrixWorkerId !== undefined
|
|
31
|
+
? { matrixWorkerId: env.matrixWorkerId }
|
|
32
|
+
: {}),
|
|
33
|
+
...(options.maxConcurrentClaims === undefined ? { maxConcurrentClaims: env.maxConcurrentClaims } : {}),
|
|
34
|
+
...(options.graphSchedulabilityRequireConfig === undefined
|
|
35
|
+
? { graphSchedulabilityRequireConfig: env.graphSchedulabilityStrict }
|
|
36
|
+
: {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function cmdServe() {
|
|
40
|
+
await loadDotenvIfAvailable();
|
|
41
|
+
const factory = await loadHostBootstrap();
|
|
42
|
+
const { workerOptions } = await factory();
|
|
43
|
+
const worker = await createMatrixWorker(mergeWorkerOptionsFromEnv(workerOptions));
|
|
44
|
+
const env = loadJobsEnv();
|
|
45
|
+
const ac = new AbortController();
|
|
46
|
+
const { signal } = ac;
|
|
47
|
+
const supervised = worker.startSupervised(signal).catch((err) => {
|
|
48
|
+
console.error('supervisor failed', err);
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
});
|
|
51
|
+
let http;
|
|
52
|
+
if (env.httpEnabled) {
|
|
53
|
+
http = await startMatrixWorkerHttp({ worker, env });
|
|
54
|
+
console.error(`@exellix/exellix-jobs listening on port ${env.port} (prefix ${env.httpPrefix})`);
|
|
55
|
+
}
|
|
56
|
+
const shutdown = async () => {
|
|
57
|
+
ac.abort();
|
|
58
|
+
await supervised;
|
|
59
|
+
await http?.close();
|
|
60
|
+
await worker.close();
|
|
61
|
+
};
|
|
62
|
+
for (const ev of ['SIGINT', 'SIGTERM']) {
|
|
63
|
+
process.on(ev, () => {
|
|
64
|
+
void shutdown().then(() => process.exit(0));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function main() {
|
|
69
|
+
const cmd = process.argv[2] ?? 'help';
|
|
70
|
+
if (cmd === 'serve') {
|
|
71
|
+
await cmdServe();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (cmd === 'help' || cmd === '-h' || cmd === '--help') {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.log(`@exellix/exellix-jobs
|
|
77
|
+
|
|
78
|
+
Commands:
|
|
79
|
+
serve Start supervised matrix loops + operator HTTP (default bootstrap: examples/host-bootstrap.mjs).
|
|
80
|
+
|
|
81
|
+
Environment (subset — see README and docs/specs.md §12):
|
|
82
|
+
EXELLIX_JOBS_HOST_BOOTSTRAP ESM host module (defaults to examples/host-bootstrap.mjs).
|
|
83
|
+
EXELLIX_JOBS_GRAPH_ENGINE_BOOTSTRAP Graph executor module (defaults to examples/graph-engine-stub.mjs).
|
|
84
|
+
PORT HTTP listen port (default 8080).
|
|
85
|
+
JOBS_HTTP_PREFIX Base path prefix (default /v1).
|
|
86
|
+
EXELLIX_JOBS_API_KEY API key for mutating HTTP routes.
|
|
87
|
+
Mutating graph routes: PATCH /v1/graphs/:id/operational | /publication (see docs/troubleshooting.md).
|
|
88
|
+
MATRIX_WORKER_ID Worker identity in /health and /workers/status.
|
|
89
|
+
EXELLIX_JOBS_ACTIVIX_SCHEDULER_PROBE When true, /health?probe=dependencies includes Activix lane.
|
|
90
|
+
execution_db / config_db DB names for persistence openers (default exellix-runtime / exellix).
|
|
91
|
+
`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Unknown command: ${cmd}`);
|
|
95
|
+
}
|
|
96
|
+
main().catch((e) => {
|
|
97
|
+
console.error(e);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createExecutionMatrixRuntime, type ExellixRuntimeConnectivityProbeOptions } from '@exellix/exellix-runtime';
|
|
2
|
+
/** xronox-shaped collection handle expected by `@exellix/exellix-runtime` factories (sourced from XMemory tier, not imported from `@x12i/xronox-store` here). */
|
|
3
|
+
export type MatrixPersistenceCollection = Parameters<typeof createExecutionMatrixRuntime>[0];
|
|
4
|
+
export type ExellixMatrixPersistenceProbeHandles = Pick<ExellixRuntimeConnectivityProbeOptions, 'executionStore' | 'configStore' | 'executionMongoUri' | 'configMongoUri' | 'executionPingCollection' | 'configPingCollection'>;
|
|
5
|
+
export type ExellixMatrixPersistenceHandles = {
|
|
6
|
+
rows: MatrixPersistenceCollection;
|
|
7
|
+
failures: MatrixPersistenceCollection;
|
|
8
|
+
snapshots?: MatrixPersistenceCollection;
|
|
9
|
+
matrices: MatrixPersistenceCollection;
|
|
10
|
+
graphs: MatrixPersistenceCollection;
|
|
11
|
+
/** Optional tier hook (e.g. pool warm-up). */
|
|
12
|
+
init?: () => Promise<void>;
|
|
13
|
+
close: () => Promise<void>;
|
|
14
|
+
/** Optional handles for `/health?probe=dependencies`. */
|
|
15
|
+
probe?: ExellixMatrixPersistenceProbeHandles;
|
|
16
|
+
};
|
|
17
|
+
export type OpenExellixMatrixPersistenceOptions = {
|
|
18
|
+
mongoUri?: string;
|
|
19
|
+
executionDb?: string;
|
|
20
|
+
configDb?: string;
|
|
21
|
+
/**
|
|
22
|
+
* When `createExellixMatrixDataTier` is missing from `@exellix/exellix-runtime` (peer before 3.1), fall back to
|
|
23
|
+
* legacy xronox factories on runtime (default `true` for {@link openExellixMatrixPersistence}).
|
|
24
|
+
*/
|
|
25
|
+
fallbackToRuntimeFactories?: boolean;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=collections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,KAAK,sCAAsC,EAAE,MAAM,0BAA0B,CAAC;AAErH,iKAAiK;AACjK,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7F,MAAM,MAAM,oCAAoC,GAAG,IAAI,CACrD,sCAAsC,EACtC,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,yBAAyB,GAAG,sBAAsB,CAC/H,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,2BAA2B,CAAC;IAClC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,SAAS,CAAC,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,MAAM,EAAE,2BAA2B,CAAC;IACpC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,yDAAyD;IACzD,KAAK,CAAC,EAAE,oCAAoC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAA+C,MAAM,0BAA0B,CAAC"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type JobsEnv = {
|
|
2
|
+
port: number;
|
|
3
|
+
httpPrefix: string;
|
|
4
|
+
matrixWorkerId?: string;
|
|
5
|
+
maxConcurrentClaims: number;
|
|
6
|
+
graphSchedulabilityStrict: boolean;
|
|
7
|
+
httpEnabled: boolean;
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
executionDb: string;
|
|
10
|
+
configDb: string;
|
|
11
|
+
activixSchedulerProbe: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Reads operator-oriented environment variables (see `docs/specs.md` §12).
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadJobsEnv(env?: NodeJS.ProcessEnv): JobsEnv;
|
|
17
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAwBF;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAazE"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function parseIntEnv(value, fallback) {
|
|
2
|
+
if (value === undefined || value === '') {
|
|
3
|
+
return fallback;
|
|
4
|
+
}
|
|
5
|
+
const n = Number.parseInt(value, 10);
|
|
6
|
+
return Number.isFinite(n) ? n : fallback;
|
|
7
|
+
}
|
|
8
|
+
function parseBoolEnv(value, fallback) {
|
|
9
|
+
if (value === undefined || value === '') {
|
|
10
|
+
return fallback;
|
|
11
|
+
}
|
|
12
|
+
const v = value.trim().toLowerCase();
|
|
13
|
+
if (['1', 'true', 'yes', 'on'].includes(v)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (['0', 'false', 'no', 'off'].includes(v)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reads operator-oriented environment variables (see `docs/specs.md` §12).
|
|
23
|
+
*/
|
|
24
|
+
export function loadJobsEnv(env = process.env) {
|
|
25
|
+
return {
|
|
26
|
+
port: parseIntEnv(env.PORT, 8080),
|
|
27
|
+
httpPrefix: (env.JOBS_HTTP_PREFIX ?? '/v1').replace(/\/$/, '') || '/v1',
|
|
28
|
+
matrixWorkerId: env.MATRIX_WORKER_ID?.trim() || undefined,
|
|
29
|
+
maxConcurrentClaims: Math.max(1, parseIntEnv(env.EXELLIX_JOBS_MAX_CONCURRENT_CLAIMS, 4)),
|
|
30
|
+
graphSchedulabilityStrict: parseBoolEnv(env.EXELLIX_JOBS_GRAPH_SCHEDULABILITY_STRICT, false),
|
|
31
|
+
httpEnabled: parseBoolEnv(env.EXELLIX_JOBS_HTTP_ENABLED, true),
|
|
32
|
+
apiKey: env.EXELLIX_JOBS_API_KEY?.trim() || undefined,
|
|
33
|
+
executionDb: env.execution_db?.trim() || 'exellix-runtime',
|
|
34
|
+
configDb: env.config_db?.trim() || 'exellix',
|
|
35
|
+
activixSchedulerProbe: parseBoolEnv(env.EXELLIX_JOBS_ACTIVIX_SCHEDULER_PROBE, false),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAaA,SAAS,WAAW,CAAC,KAAyB,EAAE,QAAgB;IAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB,EAAE,QAAiB;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC,UAAU,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK;QACvE,cAAc,EAAE,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS;QACzD,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC;QACxF,yBAAyB,EAAE,YAAY,CAAC,GAAG,CAAC,wCAAwC,EAAE,KAAK,CAAC;QAC5F,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC;QAC9D,MAAM,EAAE,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,SAAS;QACrD,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,iBAAiB;QAC1D,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS;QAC5C,qBAAqB,EAAE,YAAY,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC;KACrF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { buildExellixRuntimeRealLivenessPayload, type ExellixRuntimeConnectivityProbeOptions, type ExellixRuntimeHealthPayload } from '@exellix/exellix-runtime';
|
|
2
|
+
import type { JobsEnv } from '../env.js';
|
|
3
|
+
import type { MatrixWorker } from '../worker/matrix-worker.js';
|
|
4
|
+
export type JobsLivenessPayload = ReturnType<typeof buildExellixRuntimeRealLivenessPayload> & {
|
|
5
|
+
matrixWorkerId?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildJobsLivenessPayload(env: JobsEnv): JobsLivenessPayload;
|
|
8
|
+
export declare function buildJobsConnectivityProbeOptions(worker: MatrixWorker, env: JobsEnv): ExellixRuntimeConnectivityProbeOptions;
|
|
9
|
+
export declare function runJobsConnectivityProbe(worker: MatrixWorker, env: JobsEnv): Promise<ExellixRuntimeHealthPayload>;
|
|
10
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/http/health.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sCAAsC,EAEtC,KAAK,sCAAsC,EAC3C,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,sCAAsC,CAAC,GAAG;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAK1E;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,OAAO,GACX,sCAAsC,CAQxC;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,2BAA2B,CAAC,CAEtC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { buildExellixRuntimeRealLivenessPayload, runExellixRuntimeConnectivityProbe, } from '@exellix/exellix-runtime';
|
|
2
|
+
export function buildJobsLivenessPayload(env) {
|
|
3
|
+
return {
|
|
4
|
+
...buildExellixRuntimeRealLivenessPayload(),
|
|
5
|
+
...(env.matrixWorkerId !== undefined ? { matrixWorkerId: env.matrixWorkerId } : {}),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function buildJobsConnectivityProbeOptions(worker, env) {
|
|
9
|
+
const probe = worker.connectivityProbe ?? {};
|
|
10
|
+
return {
|
|
11
|
+
...probe,
|
|
12
|
+
includeXmemoryEnv: probe.includeXmemoryEnv ?? true,
|
|
13
|
+
...(env.activixSchedulerProbe ? { includeActivixSchedulerProbe: true } : {}),
|
|
14
|
+
...(env.matrixWorkerId !== undefined ? { workerIdentity: env.matrixWorkerId } : {}),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export async function runJobsConnectivityProbe(worker, env) {
|
|
18
|
+
return runExellixRuntimeConnectivityProbe(buildJobsConnectivityProbeOptions(worker, env));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/http/health.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sCAAsC,EACtC,kCAAkC,GAGnC,MAAM,0BAA0B,CAAC;AAQlC,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,OAAO;QACL,GAAG,sCAAsC,EAAE;QAC3C,GAAG,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,MAAoB,EACpB,GAAY;IAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IAC7C,OAAO;QACL,GAAG,KAAK;QACR,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,IAAI;QAClD,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAoB,EACpB,GAAY;IAEZ,OAAO,kCAAkC,CAAC,iCAAiC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FastifyInstance } from 'fastify';
|
|
2
|
+
import type { JobsEnv } from '../env.js';
|
|
3
|
+
import type { MatrixWorker } from '../worker/matrix-worker.js';
|
|
4
|
+
export type StartMatrixWorkerHttpOptions = {
|
|
5
|
+
worker: MatrixWorker;
|
|
6
|
+
env?: JobsEnv;
|
|
7
|
+
host?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function startMatrixWorkerHttp(opts: StartMatrixWorkerHttpOptions): Promise<FastifyInstance>;
|
|
10
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,eAAe,EAA0C,MAAM,SAAS,CAAC;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA6B/D,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,OAAO,CAAC,eAAe,CAAC,CAuExG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import Fastify, {} from 'fastify';
|
|
2
|
+
import { loadJobsEnv } from '../env.js';
|
|
3
|
+
import { listGraphSummaries } from '../worker/discovery.js';
|
|
4
|
+
import { buildJobsLivenessPayload, runJobsConnectivityProbe } from './health.js';
|
|
5
|
+
function assertMutationAuthorized(env, req, reply) {
|
|
6
|
+
if (!env.apiKey) {
|
|
7
|
+
void reply.code(501).send({
|
|
8
|
+
error: 'Mutations are disabled until EXELLIX_JOBS_API_KEY is configured (see docs/specs.md §10).',
|
|
9
|
+
});
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const header = req.headers['x-exellix-jobs-api-key'];
|
|
13
|
+
const bearer = req.headers.authorization?.match(/^Bearer\s+(.+)$/i)?.[1];
|
|
14
|
+
const presented = (typeof header === 'string' ? header : undefined) ?? bearer;
|
|
15
|
+
if (presented !== env.apiKey) {
|
|
16
|
+
void reply.code(401).send({ error: 'Unauthorized' });
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
function readQueryParam(req, key) {
|
|
22
|
+
if (typeof req.query !== 'object' || !req.query || !(key in req.query)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const value = req.query[key];
|
|
26
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
27
|
+
}
|
|
28
|
+
export async function startMatrixWorkerHttp(opts) {
|
|
29
|
+
const env = opts.env ?? loadJobsEnv();
|
|
30
|
+
const fastify = Fastify({ logger: true });
|
|
31
|
+
await fastify.register(async (app) => {
|
|
32
|
+
app.get('/health', async (req) => {
|
|
33
|
+
const probe = readQueryParam(req, 'probe');
|
|
34
|
+
if (probe === 'dependencies') {
|
|
35
|
+
return runJobsConnectivityProbe(opts.worker, env);
|
|
36
|
+
}
|
|
37
|
+
return buildJobsLivenessPayload(env);
|
|
38
|
+
});
|
|
39
|
+
app.get('/graphs', async () => listGraphSummaries(opts.worker.configStore));
|
|
40
|
+
app.get('/workers/status', async (req) => {
|
|
41
|
+
const matrixCatalogId = readQueryParam(req, 'matrixCatalogId');
|
|
42
|
+
return opts.worker.getStatus(matrixCatalogId ? { matrixCatalogId } : undefined);
|
|
43
|
+
});
|
|
44
|
+
app.get('/metrics', async (_req, reply) => {
|
|
45
|
+
reply.header('content-type', 'text/plain; version=0.0.4; charset=utf-8');
|
|
46
|
+
return opts.worker.metrics.registry.metrics();
|
|
47
|
+
});
|
|
48
|
+
const patchGraph = async (req, reply) => {
|
|
49
|
+
if (!assertMutationAuthorized(env, req, reply)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const { graphId } = req.params;
|
|
53
|
+
const body = req.body;
|
|
54
|
+
if (body?.expectedVersion === undefined || typeof body.expectedVersion !== 'number') {
|
|
55
|
+
return reply.code(400).send({ error: 'expectedVersion (number) is required' });
|
|
56
|
+
}
|
|
57
|
+
const rec = await opts.worker.configStore.graphs.patchOperational({
|
|
58
|
+
graphId,
|
|
59
|
+
expectedVersion: body.expectedVersion,
|
|
60
|
+
...(body.operationalState !== undefined ? { operationalState: body.operationalState } : {}),
|
|
61
|
+
...(body.publicationStatus !== undefined ? { publicationStatus: body.publicationStatus } : {}),
|
|
62
|
+
});
|
|
63
|
+
return rec;
|
|
64
|
+
};
|
|
65
|
+
app.patch('/graphs/:graphId/operational', patchGraph);
|
|
66
|
+
app.patch('/graphs/:graphId/publication', patchGraph);
|
|
67
|
+
app.post('/workers/pause', async (req, reply) => {
|
|
68
|
+
if (!assertMutationAuthorized(env, req, reply)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
opts.worker.pauseController.pause();
|
|
72
|
+
return { paused: true };
|
|
73
|
+
});
|
|
74
|
+
app.post('/workers/resume', async (req, reply) => {
|
|
75
|
+
if (!assertMutationAuthorized(env, req, reply)) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
opts.worker.pauseController.resume();
|
|
79
|
+
return { paused: false };
|
|
80
|
+
});
|
|
81
|
+
}, { prefix: env.httpPrefix });
|
|
82
|
+
await fastify.listen({ port: env.port, host: opts.host ?? '0.0.0.0' });
|
|
83
|
+
return fastify;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createMatrixWorker, type CreateMatrixWorkerOptions, type MatrixAssignment, type MatrixWorker, type MatrixWorkerStatus, discoverMatrixAssignments, listGraphSummaries, } from './worker/matrix-worker.js';
|
|
2
|
+
export { runMatrixContinuouslyByCatalogIdWithMetrics } from './worker/continuous-loop.js';
|
|
3
|
+
export type { RunMatrixContinuouslyByCatalogIdWithMetricsOptions } from './worker/continuous-loop.js';
|
|
4
|
+
export { wrapMatrixGraphExecutor, type WrapMatrixGraphExecutorOptions } from './worker/wrap-execute-graph.js';
|
|
5
|
+
export { startMatrixWorkerHttp, type StartMatrixWorkerHttpOptions } from './http/server.js';
|
|
6
|
+
export { buildJobsLivenessPayload, runJobsConnectivityProbe } from './http/health.js';
|
|
7
|
+
export { loadJobsEnv, type JobsEnv } from './env.js';
|
|
8
|
+
export { createJobsMetrics, type JobsMetrics } from './metrics.js';
|
|
9
|
+
export type { ExellixMatrixPersistenceHandles, ExellixMatrixPersistenceProbeHandles, MatrixPersistenceCollection, OpenExellixMatrixPersistenceOptions, } from './collections.js';
|
|
10
|
+
export { openExellixMatrixPersistenceFromXmemoryStore } from './xmemory-matrix-tier.js';
|
|
11
|
+
export { openExellixMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
12
|
+
export { openExellixMatrixPersistence } from './open-matrix-persistence.js';
|
|
13
|
+
export { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
14
|
+
export { createInMemoryMatrixPersistence } from './memory-matrix-tier.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2CAA2C,EAAE,MAAM,6BAA6B,CAAC;AAC1F,YAAY,EAAE,kDAAkD,EAAE,MAAM,6BAA6B,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,KAAK,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EACV,+BAA+B,EAC/B,oCAAoC,EACpC,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4CAA4C,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,gDAAgD,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { createMatrixWorker, discoverMatrixAssignments, listGraphSummaries, } from './worker/matrix-worker.js';
|
|
2
|
+
export { runMatrixContinuouslyByCatalogIdWithMetrics } from './worker/continuous-loop.js';
|
|
3
|
+
export { wrapMatrixGraphExecutor } from './worker/wrap-execute-graph.js';
|
|
4
|
+
export { startMatrixWorkerHttp } from './http/server.js';
|
|
5
|
+
export { buildJobsLivenessPayload, runJobsConnectivityProbe } from './http/health.js';
|
|
6
|
+
export { loadJobsEnv } from './env.js';
|
|
7
|
+
export { createJobsMetrics } from './metrics.js';
|
|
8
|
+
export { openExellixMatrixPersistenceFromXmemoryStore } from './xmemory-matrix-tier.js';
|
|
9
|
+
export { openExellixMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
10
|
+
export { openExellixMatrixPersistence } from './open-matrix-persistence.js';
|
|
11
|
+
export { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
12
|
+
export { createInMemoryMatrixPersistence } from './memory-matrix-tier.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAKlB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2CAA2C,EAAE,MAAM,6BAA6B,CAAC;AAE1F,OAAO,EAAE,uBAAuB,EAAuC,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAqC,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAgB,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAOnE,OAAO,EAAE,4CAA4C,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,gDAAgD,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ExellixMatrixPersistenceHandles } from './collections.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory matrix persistence for unit tests and local smoke runs without Mongo.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createInMemoryMatrixPersistence(): Promise<ExellixMatrixPersistenceHandles>;
|
|
6
|
+
//# sourceMappingURL=memory-matrix-tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-matrix-tier.d.ts","sourceRoot":"","sources":["../src/memory-matrix-tier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAExE;;GAEG;AACH,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAsBhG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory matrix persistence for unit tests and local smoke runs without Mongo.
|
|
3
|
+
*/
|
|
4
|
+
export async function createInMemoryMatrixPersistence() {
|
|
5
|
+
const { MemoryMatrixCollection, MATRIX_ROW_PK, MATRIX_FAILURE_PK, MATRIX_SNAPSHOT_PK, MATRIX_CONFIG_PK, GRAPH_CONFIG_PK, } = await import('@exellix/exellix-runtime');
|
|
6
|
+
const rows = new MemoryMatrixCollection(MATRIX_ROW_PK).asCollection();
|
|
7
|
+
const failures = new MemoryMatrixCollection(MATRIX_FAILURE_PK).asCollection();
|
|
8
|
+
const snapshots = new MemoryMatrixCollection(MATRIX_SNAPSHOT_PK).asCollection();
|
|
9
|
+
const matrices = new MemoryMatrixCollection(MATRIX_CONFIG_PK).asCollection();
|
|
10
|
+
const graphs = new MemoryMatrixCollection(GRAPH_CONFIG_PK).asCollection();
|
|
11
|
+
return {
|
|
12
|
+
rows,
|
|
13
|
+
failures,
|
|
14
|
+
snapshots,
|
|
15
|
+
matrices,
|
|
16
|
+
graphs,
|
|
17
|
+
close: async () => undefined,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=memory-matrix-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-matrix-tier.js","sourceRoot":"","sources":["../src/memory-matrix-tier.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,MAAM,EACJ,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAC,YAAY,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,YAAY,EAAE,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,YAAY,EAAE,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,YAAY,EAAE,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,CAAC;IAC1E,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Counter, Histogram, Registry } from 'prom-client';
|
|
2
|
+
export type JobsMetrics = {
|
|
3
|
+
registry: Registry;
|
|
4
|
+
matrixClaimsStartedTotal: Counter<string>;
|
|
5
|
+
matrixClaimsCompletedTotal: Counter<string>;
|
|
6
|
+
matrixClaimsFailedTotal: Counter<string>;
|
|
7
|
+
matrixRowsMaterializedTotal: Counter<string>;
|
|
8
|
+
matrixWorkerIdleSecondsTotal: Counter<string>;
|
|
9
|
+
matrixWorkerCyclesTotal: Counter<string>;
|
|
10
|
+
executeGraphDurationSeconds: Histogram<string>;
|
|
11
|
+
};
|
|
12
|
+
export declare function createJobsMetrics(registry?: Registry<"text/plain; version=0.0.4; charset=utf-8">): JobsMetrics;
|
|
13
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,0BAA0B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,4BAA4B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,2BAA2B,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,QAAQ,uDAAiB,GAAG,WAAW,CAsDxE"}
|