@exellix/exellix-matrix-read 1.0.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 +87 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +66 -0
- package/dist/cli.js.map +1 -0
- package/dist/collections.d.ts +19 -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 +8 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +16 -0
- package/dist/env.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 +90 -0
- package/dist/http/server.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/open-persistence.d.ts +4 -0
- package/dist/open-persistence.d.ts.map +1 -0
- package/dist/open-persistence.js +41 -0
- package/dist/open-persistence.js.map +1 -0
- package/dist/persistence-env.d.ts +4 -0
- package/dist/persistence-env.d.ts.map +1 -0
- package/dist/persistence-env.js +11 -0
- package/dist/persistence-env.js.map +1 -0
- package/dist/runtime-matrix-tier.d.ts +3 -0
- package/dist/runtime-matrix-tier.d.ts.map +1 -0
- package/dist/runtime-matrix-tier.js +39 -0
- package/dist/runtime-matrix-tier.js.map +1 -0
- package/dist/tier.d.ts +44 -0
- package/dist/tier.d.ts.map +1 -0
- package/dist/tier.js +40 -0
- package/dist/tier.js.map +1 -0
- package/dist/xmemory-matrix-tier.d.ts +6 -0
- package/dist/xmemory-matrix-tier.d.ts.map +1 -0
- package/dist/xmemory-matrix-tier.js +45 -0
- package/dist/xmemory-matrix-tier.js.map +1 -0
- package/package.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# `@exellix/exellix-matrix-read`
|
|
2
|
+
|
|
3
|
+
**Read-only execution-matrix data tier** — programmatic and HTTP access to entity+graph job history, status counts, and execution output. Independent of `@exellix/exellix-jobs` (the worker).
|
|
4
|
+
|
|
5
|
+
Use this when Studio, BFF, or analytics need answers like:
|
|
6
|
+
|
|
7
|
+
- For **entity type X** and **graph Y**, how many matrix rows are processed / failed / waiting?
|
|
8
|
+
- What **jobId**, **timestamps**, and **inference** ran for each graph slot?
|
|
9
|
+
- Memorix entity statistics **joined** with matrix rows for one namespace.
|
|
10
|
+
|
|
11
|
+
## Boundaries
|
|
12
|
+
|
|
13
|
+
| Package | Role |
|
|
14
|
+
|---------|------|
|
|
15
|
+
| **`@exellix/exellix-matrix-read`** | Read tier + optional read HTTP |
|
|
16
|
+
| **`@exellix/exellix-jobs`** | Claim, execute, operator control (pause, PATCH) |
|
|
17
|
+
| **`@exellix/exellix-runtime`** | Row shapes, orchestration, low-level read helpers |
|
|
18
|
+
| **`@x12i/xmemory-store`** | Matrix + Memorix persistence factories |
|
|
19
|
+
|
|
20
|
+
No `mongodb` / `@x12i/xronox-store` in this package’s dependencies.
|
|
21
|
+
|
|
22
|
+
## Programmatic API
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { openMatrixReadTier } from '@exellix/exellix-matrix-read';
|
|
26
|
+
|
|
27
|
+
const tier = await openMatrixReadTier({
|
|
28
|
+
mongoUri: process.env.MONGO_URI,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Counts by slot status for one graph (optional inputGroupByPath for per-entity buckets)
|
|
32
|
+
const dashboard = await tier.graphDashboard({
|
|
33
|
+
matrixCatalogId: 'my-matrix',
|
|
34
|
+
graphId: 'my-graph',
|
|
35
|
+
inputGroupByPath: 'entityKind',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Per-row graph slots: status, jobId, inference
|
|
39
|
+
const overview = await tier.multiGraphOverview({ matrixCatalogId: 'my-matrix' });
|
|
40
|
+
|
|
41
|
+
// waiting / in-progress / processed / failed / skipped
|
|
42
|
+
const join = await tier.sourceJoinView({
|
|
43
|
+
matrixCatalogId: 'my-matrix',
|
|
44
|
+
graphId: 'my-graph',
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await tier.close();
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Entity facet (Memorix + matrix)
|
|
51
|
+
|
|
52
|
+
Pass `memorixTier` from `@x12i/xmemory-store` (`createXmemoryDataTier`) when opening the tier, or set `MATRIX_READ_MEMORIX_ENABLED=true` for `read:serve`.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
const tier = await openMatrixReadTier({
|
|
56
|
+
mongoUri: process.env.MONGO_URI,
|
|
57
|
+
memorixTier: createXmemoryDataTier(),
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const facet = await tier.entityFacet({
|
|
61
|
+
entityType: 'widget',
|
|
62
|
+
namespace: 'tenant-a',
|
|
63
|
+
matrixCatalogId: 'my-matrix',
|
|
64
|
+
graphId: 'my-graph',
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Read HTTP server
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
MONGO_URI=... npm run read:serve
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Default port **8090**, prefix **`/v1`**.
|
|
75
|
+
|
|
76
|
+
| Method | Path | Purpose |
|
|
77
|
+
|--------|------|---------|
|
|
78
|
+
| GET | `/health` | Liveness |
|
|
79
|
+
| GET | `/matrices/:catalogId/graphs/:graphId/dashboard` | Status counts (+ optional `inputGroupByPath`) |
|
|
80
|
+
| GET | `/matrices/:catalogId/graphs/:graphId/navigator` | Paginated rows + histogram |
|
|
81
|
+
| GET | `/matrices/:catalogId/graphs/:graphId/join-view` | Pipeline buckets |
|
|
82
|
+
| GET | `/matrices/:catalogId/overview` | Multi-graph slot view per row |
|
|
83
|
+
| GET | `/entities/:entityType/facet?namespace=` | Memorix + matrix facet |
|
|
84
|
+
|
|
85
|
+
## Relation to the worker
|
|
86
|
+
|
|
87
|
+
Both packages open the **same matrix persistence** (operational + config DBs). The worker **writes** rows while claiming; this package **reads** them. Deploy separately: worker replicas for execution, read tier for dashboards (can scale read replicas independently).
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { loadMatrixReadEnv } from './env.js';
|
|
3
|
+
import { startMatrixReadHttp } from './http/server.js';
|
|
4
|
+
import { createMemorixRuntimeTier } from '@exellix/exellix-runtime';
|
|
5
|
+
import { openMatrixReadTier } from './tier.js';
|
|
6
|
+
async function loadDotenvIfAvailable() {
|
|
7
|
+
const registerPath = '@x12i/env/register';
|
|
8
|
+
await import(registerPath).catch(() => undefined);
|
|
9
|
+
}
|
|
10
|
+
async function cmdServe() {
|
|
11
|
+
await loadDotenvIfAvailable();
|
|
12
|
+
const tier = await openMatrixReadTier({
|
|
13
|
+
memorixTier: await resolveOptionalMemorixTier(),
|
|
14
|
+
});
|
|
15
|
+
const env = loadMatrixReadEnv();
|
|
16
|
+
const http = await startMatrixReadHttp({ tier, env });
|
|
17
|
+
console.error(`@exellix/exellix-matrix-read listening on port ${env.port} (prefix ${env.httpPrefix})`);
|
|
18
|
+
const shutdown = async () => {
|
|
19
|
+
await http.close();
|
|
20
|
+
await tier.close();
|
|
21
|
+
};
|
|
22
|
+
for (const ev of ['SIGINT', 'SIGTERM']) {
|
|
23
|
+
process.on(ev, () => {
|
|
24
|
+
void shutdown().then(() => process.exit(0));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function resolveOptionalMemorixTier() {
|
|
29
|
+
if (process.env.MATRIX_READ_MEMORIX_ENABLED !== 'true') {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const mongoUri = process.env.MONGO_URI?.trim();
|
|
33
|
+
if (!mongoUri) {
|
|
34
|
+
console.error('@exellix/exellix-matrix-read: MATRIX_READ_MEMORIX_ENABLED but MONGO_URI is unset');
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return createMemorixRuntimeTier({ mongoUri });
|
|
38
|
+
}
|
|
39
|
+
async function main() {
|
|
40
|
+
const cmd = process.argv[2] ?? 'help';
|
|
41
|
+
if (cmd === 'serve') {
|
|
42
|
+
await cmdServe();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (cmd === 'help' || cmd === '-h' || cmd === '--help') {
|
|
46
|
+
console.log(`@exellix/exellix-matrix-read
|
|
47
|
+
|
|
48
|
+
Commands:
|
|
49
|
+
serve Start read-only HTTP API (no worker bootstrap required).
|
|
50
|
+
|
|
51
|
+
Environment:
|
|
52
|
+
MONGO_URI Matrix persistence (required for serve).
|
|
53
|
+
execution_db / config_db DB names (default exellix-runtime / exellix).
|
|
54
|
+
PORT HTTP port (default 8090).
|
|
55
|
+
MATRIX_READ_HTTP_PREFIX Route prefix (default /v1).
|
|
56
|
+
MATRIX_READ_MEMORIX_ENABLED When true, wire createMemorixRuntimeTier for /entities/.../facet.
|
|
57
|
+
`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`Unknown command: ${cmd}`);
|
|
61
|
+
}
|
|
62
|
+
main().catch((e) => {
|
|
63
|
+
console.error(e);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
});
|
|
66
|
+
//# 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":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,KAAK,UAAU,qBAAqB;IAClC,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC1C,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,qBAAqB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC;QACpC,WAAW,EAAE,MAAM,0BAA0B,EAAE;KAChD,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,kDAAkD,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAEvG,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;QAChD,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE;YAClB,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,wBAAwB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IACtC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWf,CAAC,CAAC;QACC,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createExecutionMatrixRuntime } from '@exellix/exellix-runtime';
|
|
2
|
+
export type MatrixPersistenceCollection = Parameters<typeof createExecutionMatrixRuntime>[0];
|
|
3
|
+
export type MatrixPersistenceHandles = {
|
|
4
|
+
rows: MatrixPersistenceCollection;
|
|
5
|
+
failures: MatrixPersistenceCollection;
|
|
6
|
+
snapshots?: MatrixPersistenceCollection;
|
|
7
|
+
matrices: MatrixPersistenceCollection;
|
|
8
|
+
graphs: MatrixPersistenceCollection;
|
|
9
|
+
init?: () => Promise<void>;
|
|
10
|
+
close: () => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
export type OpenMatrixPersistenceOptions = {
|
|
13
|
+
mongoUri?: string;
|
|
14
|
+
executionDb?: string;
|
|
15
|
+
configDb?: string;
|
|
16
|
+
fallbackToRuntimeFactories?: boolean;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
};
|
|
19
|
+
//# 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,MAAM,0BAA0B,CAAC;AAExE,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7F,MAAM,MAAM,wBAAwB,GAAG;IACrC,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,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAUF,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,CAOrF"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
export function loadMatrixReadEnv(env = process.env) {
|
|
9
|
+
return {
|
|
10
|
+
port: parseIntEnv(env.PORT, 8090),
|
|
11
|
+
httpPrefix: (env.MATRIX_READ_HTTP_PREFIX ?? env.JOBS_HTTP_PREFIX ?? '/v1').replace(/\/$/, '') || '/v1',
|
|
12
|
+
executionDb: env.execution_db?.trim() || 'exellix-runtime',
|
|
13
|
+
configDb: env.config_db?.trim() || 'exellix',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# 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":"AAOA,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,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,OAAO;QACL,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QACjC,UAAU,EAAE,CAAC,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK;QACtG,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,iBAAiB;QAC1D,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FastifyInstance } from 'fastify';
|
|
2
|
+
import type { MatrixReadEnv } from '../env.js';
|
|
3
|
+
import type { MatrixReadTier } from '../tier.js';
|
|
4
|
+
export type StartMatrixReadHttpOptions = {
|
|
5
|
+
tier: MatrixReadTier;
|
|
6
|
+
env?: MatrixReadEnv;
|
|
7
|
+
host?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function startMatrixReadHttp(opts: StartMatrixReadHttpOptions): 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,EAAuB,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmBjD,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC,CA0FpG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Fastify, {} from 'fastify';
|
|
2
|
+
import { loadMatrixReadEnv } from '../env.js';
|
|
3
|
+
function readQueryParam(req, key) {
|
|
4
|
+
if (typeof req.query !== 'object' || !req.query || !(key in req.query)) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
const value = req.query[key];
|
|
8
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
function readQueryInt(req, key) {
|
|
11
|
+
const raw = readQueryParam(req, key);
|
|
12
|
+
if (raw === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const n = Number.parseInt(raw, 10);
|
|
16
|
+
return Number.isFinite(n) ? n : undefined;
|
|
17
|
+
}
|
|
18
|
+
export async function startMatrixReadHttp(opts) {
|
|
19
|
+
const env = opts.env ?? loadMatrixReadEnv();
|
|
20
|
+
const fastify = Fastify({ logger: true });
|
|
21
|
+
await fastify.register(async (app) => {
|
|
22
|
+
app.get('/health', async () => ({ ok: true, service: '@exellix/exellix-matrix-read', timestamp: new Date().toISOString() }));
|
|
23
|
+
app.get('/matrices/:catalogId/graphs/:graphId/dashboard', async (req) => {
|
|
24
|
+
const matrixRunId = readQueryParam(req, 'matrixRunId');
|
|
25
|
+
const inputGroupByPath = readQueryParam(req, 'inputGroupByPath');
|
|
26
|
+
const aggregateRowScanCap = readQueryInt(req, 'aggregateRowScanCap');
|
|
27
|
+
return opts.tier.graphDashboard({
|
|
28
|
+
matrixCatalogId: req.params.catalogId,
|
|
29
|
+
graphId: req.params.graphId,
|
|
30
|
+
...(matrixRunId !== undefined ? { matrixRunId } : {}),
|
|
31
|
+
...(inputGroupByPath !== undefined ? { inputGroupByPath } : {}),
|
|
32
|
+
...(aggregateRowScanCap !== undefined ? { aggregateRowScanCap } : {}),
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
app.get('/matrices/:catalogId/graphs/:graphId/navigator', async (req) => {
|
|
36
|
+
const matrixRunId = readQueryParam(req, 'matrixRunId');
|
|
37
|
+
const limit = readQueryInt(req, 'limit');
|
|
38
|
+
const skip = readQueryInt(req, 'skip');
|
|
39
|
+
const includeFailureCount = readQueryParam(req, 'includeFailureCount') === 'true';
|
|
40
|
+
return opts.tier.navigatorPage({
|
|
41
|
+
matrixCatalogId: req.params.catalogId,
|
|
42
|
+
graphId: req.params.graphId,
|
|
43
|
+
...(matrixRunId !== undefined ? { matrixRunId } : {}),
|
|
44
|
+
...(limit !== undefined ? { limit } : {}),
|
|
45
|
+
...(skip !== undefined ? { skip } : {}),
|
|
46
|
+
includeFailureCount,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
app.get('/matrices/:catalogId/graphs/:graphId/join-view', async (req) => {
|
|
50
|
+
const matrixRunId = readQueryParam(req, 'matrixRunId');
|
|
51
|
+
const limit = readQueryInt(req, 'limit');
|
|
52
|
+
return opts.tier.sourceJoinView({
|
|
53
|
+
matrixCatalogId: req.params.catalogId,
|
|
54
|
+
graphId: req.params.graphId,
|
|
55
|
+
...(matrixRunId !== undefined ? { matrixRunId } : {}),
|
|
56
|
+
...(limit !== undefined ? { limit } : {}),
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
app.get('/matrices/:catalogId/overview', async (req) => {
|
|
60
|
+
const matrixRunId = readQueryParam(req, 'matrixRunId');
|
|
61
|
+
const limit = readQueryInt(req, 'limit');
|
|
62
|
+
const skip = readQueryInt(req, 'skip');
|
|
63
|
+
return opts.tier.multiGraphOverview({
|
|
64
|
+
matrixCatalogId: req.params.catalogId,
|
|
65
|
+
...(matrixRunId !== undefined ? { matrixRunId } : {}),
|
|
66
|
+
...(limit !== undefined ? { limit } : {}),
|
|
67
|
+
...(skip !== undefined ? { skip } : {}),
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
app.get('/entities/:entityType/facet', async (req) => {
|
|
71
|
+
const namespace = readQueryParam(req, 'namespace');
|
|
72
|
+
if (!namespace) {
|
|
73
|
+
throw new Error('Query parameter namespace is required');
|
|
74
|
+
}
|
|
75
|
+
const matrixCatalogId = readQueryParam(req, 'matrixCatalogId');
|
|
76
|
+
const matrixRunId = readQueryParam(req, 'matrixRunId');
|
|
77
|
+
const graphId = readQueryParam(req, 'graphId');
|
|
78
|
+
return opts.tier.entityFacet({
|
|
79
|
+
entityType: req.params.entityType,
|
|
80
|
+
namespace,
|
|
81
|
+
...(matrixCatalogId !== undefined ? { matrixCatalogId } : {}),
|
|
82
|
+
...(matrixRunId !== undefined ? { matrixRunId } : {}),
|
|
83
|
+
...(graphId !== undefined ? { graphId } : {}),
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}, { prefix: env.httpPrefix });
|
|
87
|
+
await fastify.listen({ port: env.port, host: opts.host ?? '0.0.0.0' });
|
|
88
|
+
return fastify;
|
|
89
|
+
}
|
|
90
|
+
//# 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,10 @@
|
|
|
1
|
+
export type { MatrixPersistenceCollection, MatrixPersistenceHandles, OpenMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
export { loadMatrixReadEnv, type MatrixReadEnv } from './env.js';
|
|
3
|
+
export { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
4
|
+
export { createInMemoryMatrixPersistence, openMatrixPersistence, } from './open-persistence.js';
|
|
5
|
+
export { openMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
6
|
+
export { openMatrixPersistenceFromXmemoryStore } from './xmemory-matrix-tier.js';
|
|
7
|
+
export { createMatrixReadTier, openMatrixReadTier, type CreateMatrixReadTierOptions, type MatrixReadTier, type OpenMatrixReadTierOptions, } from './tier.js';
|
|
8
|
+
export { startMatrixReadHttp, type StartMatrixReadHttpOptions } from './http/server.js';
|
|
9
|
+
export type { ExecutionMatrixMultiGraphRowView, FetchExecutionMatrixMultiGraphOverviewQuery, FetchGraphOperationalDashboardSliceQuery, FetchMemorixMatrixEntityFacetQuery, FetchSourceJoinViewQuery, GraphOperationalDashboardSlice, MemorixMatrixEntityFacetResult, NavigatorPage, SourceJoinView, } from '@exellix/exellix-runtime';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yCAAyC,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,KAAK,yBAAyB,GAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGxF,YAAY,EACV,gCAAgC,EAChC,2CAA2C,EAC3C,wCAAwC,EACxC,kCAAkC,EAClC,wBAAwB,EACxB,8BAA8B,EAC9B,8BAA8B,EAC9B,aAAa,EACb,cAAc,GACf,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { loadMatrixReadEnv } from './env.js';
|
|
2
|
+
export { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
3
|
+
export { createInMemoryMatrixPersistence, openMatrixPersistence, } from './open-persistence.js';
|
|
4
|
+
export { openMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
5
|
+
export { openMatrixPersistenceFromXmemoryStore } from './xmemory-matrix-tier.js';
|
|
6
|
+
export { createMatrixReadTier, openMatrixReadTier, } from './tier.js';
|
|
7
|
+
export { startMatrixReadHttp } from './http/server.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yCAAyC,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAInB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAmC,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MatrixPersistenceHandles, OpenMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
export declare function openMatrixPersistence(options?: OpenMatrixPersistenceOptions): Promise<MatrixPersistenceHandles>;
|
|
3
|
+
export declare function createInMemoryMatrixPersistence(): Promise<MatrixPersistenceHandles>;
|
|
4
|
+
//# sourceMappingURL=open-persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-persistence.d.ts","sourceRoot":"","sources":["../src/open-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAa/F,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,wBAAwB,CAAC,CAenC;AAED,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAezF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
2
|
+
import { openMatrixPersistenceFromRuntimeFactories } from './runtime-matrix-tier.js';
|
|
3
|
+
import { openMatrixPersistenceFromXmemoryStore } 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
|
+
export async function openMatrixPersistence(options = {}) {
|
|
10
|
+
const resolved = resolveMatrixPersistenceOptionsFromEnv(options);
|
|
11
|
+
const fallback = resolved.fallbackToRuntimeFactories !== false;
|
|
12
|
+
try {
|
|
13
|
+
return await openMatrixPersistenceFromXmemoryStore(resolved);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (!fallback) {
|
|
17
|
+
throw err;
|
|
18
|
+
}
|
|
19
|
+
if (!isMatrixDataTierFactoryUnavailable(err)) {
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
return openMatrixPersistenceFromRuntimeFactories(resolved);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function createInMemoryMatrixPersistence() {
|
|
26
|
+
const { MemoryMatrixCollection } = await import('@exellix/exellix-runtime');
|
|
27
|
+
const rows = new MemoryMatrixCollection('rowId').asCollection();
|
|
28
|
+
const failures = new MemoryMatrixCollection('failureId').asCollection();
|
|
29
|
+
const snapshots = new MemoryMatrixCollection('snapshotId').asCollection();
|
|
30
|
+
const matrices = new MemoryMatrixCollection('matrixCatalogId').asCollection();
|
|
31
|
+
const graphs = new MemoryMatrixCollection('graphId').asCollection();
|
|
32
|
+
return {
|
|
33
|
+
rows,
|
|
34
|
+
failures,
|
|
35
|
+
snapshots,
|
|
36
|
+
matrices,
|
|
37
|
+
graphs,
|
|
38
|
+
close: async () => undefined,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=open-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-persistence.js","sourceRoot":"","sources":["../src/open-persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sCAAsC,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AAEjF,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,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAwC,EAAE;IAE1C,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,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IAC/D,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,yCAAyC,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,YAAY,EAAE,CAAC;IACxE,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,YAAY,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,CAAC;IACpE,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,4 @@
|
|
|
1
|
+
import type { OpenMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
import { type MatrixReadEnv } from './env.js';
|
|
3
|
+
export declare function resolveMatrixPersistenceOptionsFromEnv(overrides?: OpenMatrixPersistenceOptions, env?: MatrixReadEnv): OpenMatrixPersistenceOptions;
|
|
4
|
+
//# 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,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjE,wBAAgB,sCAAsC,CACpD,SAAS,GAAE,4BAAiC,EAC5C,GAAG,GAAE,aAAmC,GACvC,4BAA4B,CAQ9B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loadMatrixReadEnv } from './env.js';
|
|
2
|
+
export function resolveMatrixPersistenceOptionsFromEnv(overrides = {}, env = loadMatrixReadEnv()) {
|
|
3
|
+
const mongoUri = overrides.mongoUri ?? (process.env.MONGO_URI?.trim() || undefined);
|
|
4
|
+
return {
|
|
5
|
+
...overrides,
|
|
6
|
+
...(mongoUri !== undefined ? { mongoUri } : {}),
|
|
7
|
+
executionDb: overrides.executionDb ?? env.executionDb,
|
|
8
|
+
configDb: overrides.configDb ?? env.configDb,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# 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,iBAAiB,EAAsB,MAAM,UAAU,CAAC;AAEjE,MAAM,UAAU,sCAAsC,CACpD,YAA0C,EAAE,EAC5C,MAAqB,iBAAiB,EAAE;IAExC,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,3 @@
|
|
|
1
|
+
import type { MatrixPersistenceHandles, OpenMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
export declare function openMatrixPersistenceFromRuntimeFactories(options?: OpenMatrixPersistenceOptions): Promise<MatrixPersistenceHandles>;
|
|
3
|
+
//# 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,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAK/F,wBAAsB,yCAAyC,CAC7D,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,wBAAwB,CAAC,CAiDnC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { resolveMatrixPersistenceOptionsFromEnv } from './persistence-env.js';
|
|
2
|
+
export async function openMatrixPersistenceFromRuntimeFactories(options = {}) {
|
|
3
|
+
const resolved = resolveMatrixPersistenceOptionsFromEnv(options);
|
|
4
|
+
const mongoUri = resolved.mongoUri ?? process.env.MONGO_URI?.trim();
|
|
5
|
+
if (!mongoUri) {
|
|
6
|
+
throw new Error('@exellix/exellix-matrix-read: MONGO_URI is required to open matrix persistence.');
|
|
7
|
+
}
|
|
8
|
+
const runtime = (await import('@exellix/exellix-runtime'));
|
|
9
|
+
const xronox = (await import('@exellix/exellix-runtime/internal/xronox-matrix'));
|
|
10
|
+
const { createExecutionMatrixRuntimeFromXronox, createExellixConfigStoreFromXronox } = xronox;
|
|
11
|
+
const { executionMatrixRowsCollectionDef, executionMatrixFailuresCollectionDef, executionMatrixSnapshotsCollectionDef, exellixMatrixConfigsCollectionDef, exellixGraphConfigsCollectionDef, } = runtime;
|
|
12
|
+
const exec = await createExecutionMatrixRuntimeFromXronox({
|
|
13
|
+
mongoUri,
|
|
14
|
+
mongoDb: resolved.executionDb,
|
|
15
|
+
serializeClaims: true,
|
|
16
|
+
});
|
|
17
|
+
const cfg = await createExellixConfigStoreFromXronox({
|
|
18
|
+
mongoUri,
|
|
19
|
+
mongoDb: resolved.configDb,
|
|
20
|
+
});
|
|
21
|
+
const rows = exec.store.collection(executionMatrixRowsCollectionDef().name);
|
|
22
|
+
const failures = exec.store.collection(executionMatrixFailuresCollectionDef().name);
|
|
23
|
+
const snapshots = exec.store.collection(executionMatrixSnapshotsCollectionDef().name);
|
|
24
|
+
const matrices = cfg.store.collection(exellixMatrixConfigsCollectionDef().name);
|
|
25
|
+
const graphs = cfg.store.collection(exellixGraphConfigsCollectionDef().name);
|
|
26
|
+
let closed = false;
|
|
27
|
+
const close = async () => {
|
|
28
|
+
if (closed) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
closed = true;
|
|
32
|
+
await exec.store.close().catch(() => undefined);
|
|
33
|
+
await cfg.store.close().catch(() => undefined);
|
|
34
|
+
await exec.closeMongoDriverPassThrough?.().catch(() => undefined);
|
|
35
|
+
await cfg.closeMongoDriverPassThrough?.().catch(() => undefined);
|
|
36
|
+
};
|
|
37
|
+
return { rows, failures, snapshots, matrices, graphs, close };
|
|
38
|
+
}
|
|
39
|
+
//# 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,MAAM,CAAC,KAAK,UAAU,yCAAyC,CAC7D,UAAwC,EAAE;IAE1C,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,CAAC,iFAAiF,CAAC,CAAC;IACrG,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,EAAE,sCAAsC,EAAE,kCAAkC,EAAE,GAAG,MAAM,CAAC;IAC9F,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,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAChE,CAAC"}
|
package/dist/tier.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ExecutionMatrixMultiGraphRowView, type ExecutionMatrixRuntime, type ExellixConfigStore, type FetchExecutionMatrixMultiGraphOverviewQuery, type FetchGraphOperationalDashboardSliceQuery, type FetchMemorixMatrixEntityFacetQuery, type FetchSourceJoinViewQuery, type GraphOperationalDashboardSlice, type ListMatrixRowsOptions, type MatrixSourceResolver, type MemorixMatrixEntityFacetResult, type NavigatorPage, type SourceJoinView, type MemorixRuntimeTier } from '@exellix/exellix-runtime';
|
|
2
|
+
import type { MatrixPersistenceHandles, OpenMatrixPersistenceOptions } from './collections.js';
|
|
3
|
+
export type CreateMatrixReadTierOptions = {
|
|
4
|
+
persistence: MatrixPersistenceHandles;
|
|
5
|
+
/** Optional Memorix tier for {@link MatrixReadTier.entityFacet}. */
|
|
6
|
+
memorixTier?: MemorixRuntimeTier;
|
|
7
|
+
};
|
|
8
|
+
export type OpenMatrixReadTierOptions = OpenMatrixPersistenceOptions & {
|
|
9
|
+
memorixTier?: MemorixRuntimeTier;
|
|
10
|
+
};
|
|
11
|
+
export type MatrixReadTier = {
|
|
12
|
+
readonly runtime: ExecutionMatrixRuntime;
|
|
13
|
+
readonly configStore: ExellixConfigStore;
|
|
14
|
+
readonly memorixTier?: MemorixRuntimeTier;
|
|
15
|
+
/**
|
|
16
|
+
* Per-graph operational dashboard: row counts by slot status, optional grouping on row `input`
|
|
17
|
+
* (e.g. entity kind). Answers “how many jobs in which state for this graph”.
|
|
18
|
+
*/
|
|
19
|
+
graphDashboard: (query: FetchGraphOperationalDashboardSliceQuery) => Promise<GraphOperationalDashboardSlice>;
|
|
20
|
+
/** Paginated matrix rows with optional per-graph status histogram. */
|
|
21
|
+
navigatorPage: (query: ListMatrixRowsOptions & {
|
|
22
|
+
graphId?: string;
|
|
23
|
+
includeFailureCount?: boolean;
|
|
24
|
+
}) => Promise<NavigatorPage>;
|
|
25
|
+
/**
|
|
26
|
+
* Waiting / in-progress / processed / failed / skipped for one graph within a matrix scope.
|
|
27
|
+
*/
|
|
28
|
+
sourceJoinView: (query: FetchSourceJoinViewQuery, opts?: {
|
|
29
|
+
sourceResolver?: MatrixSourceResolver;
|
|
30
|
+
}) => Promise<SourceJoinView>;
|
|
31
|
+
/**
|
|
32
|
+
* Per materialized row: all graph slots with status, jobId, timestamps, and inference output.
|
|
33
|
+
*/
|
|
34
|
+
multiGraphOverview: (query: FetchExecutionMatrixMultiGraphOverviewQuery) => Promise<ExecutionMatrixMultiGraphRowView[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Entity-type facet: Memorix tier statistics plus matching matrix rows / snapshots.
|
|
37
|
+
* Requires {@link memorixTier} on the tier instance.
|
|
38
|
+
*/
|
|
39
|
+
entityFacet: (query: FetchMemorixMatrixEntityFacetQuery) => Promise<MemorixMatrixEntityFacetResult>;
|
|
40
|
+
close: () => Promise<void>;
|
|
41
|
+
};
|
|
42
|
+
export declare function createMatrixReadTier(options: CreateMatrixReadTierOptions): Promise<MatrixReadTier>;
|
|
43
|
+
export declare function openMatrixReadTier(options?: OpenMatrixReadTierOptions): Promise<MatrixReadTier>;
|
|
44
|
+
//# sourceMappingURL=tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../src/tier.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,2CAA2C,EAChD,KAAK,wCAAwC,EAC7C,KAAK,kCAAkC,EACvC,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAG/F,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,wBAAwB,CAAC;IACtC,oEAAoE;IACpE,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,4BAA4B,GAAG;IACrE,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C;;;OAGG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,wCAAwC,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7G,sEAAsE;IACtE,aAAa,EAAE,CACb,KAAK,EAAE,qBAAqB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,KAC/E,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B;;OAEG;IACH,cAAc,EAAE,CACd,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,oBAAoB,CAAA;KAAE,KAC7C,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B;;OAEG;IACH,kBAAkB,EAAE,CAClB,KAAK,EAAE,2CAA2C,KAC/C,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAAC;IACjD;;;OAGG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,kCAAkC,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACpG,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,CAAC,CAuCxG;AAED,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,cAAc,CAAC,CAIzG"}
|
package/dist/tier.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createExecutionMatrixRuntime, createExellixConfigStore, fetchExecutionMatrixMultiGraphOverview, fetchExecutionMatrixNavigatorPage, fetchGraphOperationalDashboardSlice, fetchMemorixMatrixEntityFacet, fetchSourceJoinView, } from '@exellix/exellix-runtime';
|
|
2
|
+
import { openMatrixPersistence } from './open-persistence.js';
|
|
3
|
+
export async function createMatrixReadTier(options) {
|
|
4
|
+
await options.persistence.init?.();
|
|
5
|
+
const runtime = createExecutionMatrixRuntime(options.persistence.rows, options.persistence.failures, {
|
|
6
|
+
snapshots: options.persistence.snapshots,
|
|
7
|
+
serializeClaims: true,
|
|
8
|
+
});
|
|
9
|
+
const configStore = createExellixConfigStore({
|
|
10
|
+
matrices: options.persistence.matrices,
|
|
11
|
+
graphs: options.persistence.graphs,
|
|
12
|
+
});
|
|
13
|
+
const memorixTier = options.memorixTier;
|
|
14
|
+
return {
|
|
15
|
+
runtime,
|
|
16
|
+
configStore,
|
|
17
|
+
memorixTier,
|
|
18
|
+
graphDashboard: (query) => fetchGraphOperationalDashboardSlice({
|
|
19
|
+
runtime,
|
|
20
|
+
loadGraphConfig: (graphId) => configStore.graphs.get(graphId),
|
|
21
|
+
}, query),
|
|
22
|
+
navigatorPage: (query) => fetchExecutionMatrixNavigatorPage(runtime, query),
|
|
23
|
+
sourceJoinView: (query, opts) => fetchSourceJoinView({ runtime, sourceResolver: opts?.sourceResolver }, query),
|
|
24
|
+
multiGraphOverview: (query) => fetchExecutionMatrixMultiGraphOverview(runtime, query),
|
|
25
|
+
entityFacet: (query) => {
|
|
26
|
+
if (!memorixTier) {
|
|
27
|
+
throw new Error('@exellix/exellix-matrix-read: entityFacet requires memorixTier — pass memorixTier when opening the read tier ' +
|
|
28
|
+
'(e.g. createMemorixRuntimeTier() from @exellix/exellix-runtime).');
|
|
29
|
+
}
|
|
30
|
+
return fetchMemorixMatrixEntityFacet({ tier: memorixTier, runtime }, query);
|
|
31
|
+
},
|
|
32
|
+
close: () => options.persistence.close(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export async function openMatrixReadTier(options = {}) {
|
|
36
|
+
const { memorixTier, ...persistenceOptions } = options;
|
|
37
|
+
const persistence = await openMatrixPersistence(persistenceOptions);
|
|
38
|
+
return createMatrixReadTier({ persistence, memorixTier });
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tier.js.map
|
package/dist/tier.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier.js","sourceRoot":"","sources":["../src/tier.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,sCAAsC,EACtC,iCAAiC,EACjC,mCAAmC,EACnC,6BAA6B,EAC7B,mBAAmB,GAepB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA8C9D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,4BAA4B,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;QACnG,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS;QACxC,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAC3C,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ;QACtC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;KACnC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAExC,OAAO;QACL,OAAO;QACP,WAAW;QACX,WAAW;QACX,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACxB,mCAAmC,CACjC;YACE,OAAO;YACP,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;SAC9D,EACD,KAAK,CACN;QACH,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iCAAiC,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3E,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAC9B,mBAAmB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,CAAC;QAC/E,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sCAAsC,CAAC,OAAO,EAAE,KAAK,CAAC;QACrF,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,+GAA+G;oBAC7G,kEAAkE,CACrE,CAAC;YACJ,CAAC;YACD,OAAO,6BAA6B,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAAqC,EAAE;IAC9E,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IACpE,OAAO,oBAAoB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MatrixPersistenceHandles, OpenMatrixPersistenceOptions } from './collections.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves {@link createExellixMatrixDataTier} from `@exellix/exellix-matrix-persister` or `@x12i/xmemory-store`.
|
|
4
|
+
*/
|
|
5
|
+
export declare function openMatrixPersistenceFromXmemoryStore(options: OpenMatrixPersistenceOptions): Promise<MatrixPersistenceHandles>;
|
|
6
|
+
//# sourceMappingURL=xmemory-matrix-tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmemory-matrix-tier.d.ts","sourceRoot":"","sources":["../src/xmemory-matrix-tier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AA4B/F;;GAEG;AACH,wBAAsB,qCAAqC,CACzD,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,wBAAwB,CAAC,CAqBnC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const FACTORY = 'createExellixMatrixDataTier';
|
|
2
|
+
const FACTORY_PACKAGES = ['@exellix/exellix-matrix-persister', '@x12i/xmemory-store'];
|
|
3
|
+
async function loadMatrixDataTierFactory() {
|
|
4
|
+
const errors = [];
|
|
5
|
+
for (const pkg of FACTORY_PACKAGES) {
|
|
6
|
+
try {
|
|
7
|
+
const mod = (await import(pkg));
|
|
8
|
+
const factory = mod[FACTORY];
|
|
9
|
+
if (typeof factory === 'function') {
|
|
10
|
+
return factory;
|
|
11
|
+
}
|
|
12
|
+
errors.push(`${pkg}: "${FACTORY}" is not exported`);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
16
|
+
errors.push(`${pkg}: ${message}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
throw new Error(`@exellix/exellix-matrix-read: "${FACTORY}" is not exported from @exellix/exellix-matrix-persister or @x12i/xmemory-store. ` +
|
|
20
|
+
`Tried:\n${errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolves {@link createExellixMatrixDataTier} from `@exellix/exellix-matrix-persister` or `@x12i/xmemory-store`.
|
|
24
|
+
*/
|
|
25
|
+
export async function openMatrixPersistenceFromXmemoryStore(options) {
|
|
26
|
+
const factory = await loadMatrixDataTierFactory();
|
|
27
|
+
const tier = await factory(options);
|
|
28
|
+
const t = tier;
|
|
29
|
+
const { rows, failures, matrices, graphs, close } = t;
|
|
30
|
+
if (!rows || !failures || !matrices || !graphs || typeof close !== 'function') {
|
|
31
|
+
throw new Error(`@exellix/exellix-matrix-read: "${FACTORY}" returned an object missing rows, failures, matrices, graphs, or close().`);
|
|
32
|
+
}
|
|
33
|
+
if (t.init) {
|
|
34
|
+
await t.init();
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
rows,
|
|
38
|
+
failures,
|
|
39
|
+
snapshots: t.snapshots,
|
|
40
|
+
matrices,
|
|
41
|
+
graphs,
|
|
42
|
+
close: () => Promise.resolve(close.call(tier)),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=xmemory-matrix-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmemory-matrix-tier.js","sourceRoot":"","sources":["../src/xmemory-matrix-tier.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAC9C,MAAM,gBAAgB,GAAG,CAAC,mCAAmC,EAAE,qBAAqB,CAAU,CAAC;AAE/F,KAAK,UAAU,yBAAyB;IAGtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAA4B,CAAC;YAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,OAAsE,CAAC;YAChF,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,OAAO,mBAAmB,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,kCAAkC,OAAO,mFAAmF;QAC1H,WAAW,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,OAAqC;IAErC,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAA0E,CAAC;IACrF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CACb,kCAAkC,OAAO,4EAA4E,CACtH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IACD,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ;QACR,MAAM;QACN,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@exellix/exellix-matrix-read",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Read-only execution-matrix data tier: entity+graph job history, status counts, and dashboard queries over @exellix/exellix-runtime.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=20"
|
|
8
|
+
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public",
|
|
11
|
+
"registry": "https://registry.npmjs.org/"
|
|
12
|
+
},
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./cli": {
|
|
21
|
+
"types": "./dist/cli.d.ts",
|
|
22
|
+
"import": "./dist/cli.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"exellix-matrix-read": "./dist/cli.js"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"docs"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc -p tsconfig.build.json",
|
|
34
|
+
"clean": "node -e \"import('node:fs').then(fs=>fs.promises.rm('dist',{recursive:true,force:true}))\"",
|
|
35
|
+
"prepack": "npm run build",
|
|
36
|
+
"read:serve": "node dist/cli.js serve",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"test:watch": "vitest"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@exellix/exellix-matrix-persister": "^1.0.1",
|
|
42
|
+
"@exellix/exellix-runtime": "^5.1.8",
|
|
43
|
+
"@x12i/xmemory-store": "^2.9.0"
|
|
44
|
+
},
|
|
45
|
+
"peerDependenciesMeta": {
|
|
46
|
+
"@exellix/exellix-matrix-persister": {
|
|
47
|
+
"optional": true
|
|
48
|
+
},
|
|
49
|
+
"@x12i/xmemory-store": {
|
|
50
|
+
"optional": true
|
|
51
|
+
},
|
|
52
|
+
"@x12i/env": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"fastify": "^5.8.5"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@exellix/exellix-runtime": "^5.1.8",
|
|
61
|
+
"@types/node": "^22.10.2",
|
|
62
|
+
"typescript": "^5.7.2",
|
|
63
|
+
"vitest": "^3.0.0"
|
|
64
|
+
},
|
|
65
|
+
"keywords": [
|
|
66
|
+
"exellix",
|
|
67
|
+
"execution-matrix",
|
|
68
|
+
"read-tier",
|
|
69
|
+
"dashboard"
|
|
70
|
+
],
|
|
71
|
+
"license": "exellix-license"
|
|
72
|
+
}
|