4runr-os 1.0.28 → 1.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collectors/collector_assets.d.ts +19 -0
- package/dist/collectors/collector_assets.d.ts.map +1 -0
- package/dist/collectors/collector_assets.js +72 -0
- package/dist/collectors/collector_assets.js.map +1 -0
- package/dist/collectors/collector_capabilities.d.ts +19 -0
- package/dist/collectors/collector_capabilities.d.ts.map +1 -0
- package/dist/collectors/collector_capabilities.js +61 -0
- package/dist/collectors/collector_capabilities.js.map +1 -0
- package/dist/collectors/collector_feed.d.ts +30 -0
- package/dist/collectors/collector_feed.d.ts.map +1 -0
- package/dist/collectors/collector_feed.js +78 -0
- package/dist/collectors/collector_feed.js.map +1 -0
- package/dist/collectors/collector_geo.d.ts +12 -0
- package/dist/collectors/collector_geo.d.ts.map +1 -0
- package/dist/collectors/collector_geo.js +248 -0
- package/dist/collectors/collector_geo.js.map +1 -0
- package/dist/collectors/collector_network.d.ts +22 -0
- package/dist/collectors/collector_network.d.ts.map +1 -0
- package/dist/collectors/collector_network.js +83 -0
- package/dist/collectors/collector_network.js.map +1 -0
- package/dist/collectors/collector_posture.d.ts +25 -0
- package/dist/collectors/collector_posture.d.ts.map +1 -0
- package/dist/collectors/collector_posture.js +207 -0
- package/dist/collectors/collector_posture.js.map +1 -0
- package/dist/collectors/collector_resources.d.ts +21 -0
- package/dist/collectors/collector_resources.d.ts.map +1 -0
- package/dist/collectors/collector_resources.js +87 -0
- package/dist/collectors/collector_resources.js.map +1 -0
- package/dist/collectors/helpers.d.ts +21 -0
- package/dist/collectors/helpers.d.ts.map +1 -0
- package/dist/collectors/helpers.js +49 -0
- package/dist/collectors/helpers.js.map +1 -0
- package/dist/core/collectorRegistry.d.ts +43 -0
- package/dist/core/collectorRegistry.d.ts.map +1 -0
- package/dist/core/collectorRegistry.js +76 -0
- package/dist/core/collectorRegistry.js.map +1 -0
- package/dist/core/constants.d.ts +25 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +33 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/eventBus.d.ts +36 -0
- package/dist/core/eventBus.d.ts.map +1 -0
- package/dist/core/eventBus.js +52 -0
- package/dist/core/eventBus.js.map +1 -0
- package/dist/core/types.d.ts +128 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.js +135 -5
- package/dist/index.js.map +1 -1
- package/dist/state/getCollectorResults.d.ts +18 -0
- package/dist/state/getCollectorResults.d.ts.map +1 -0
- package/dist/state/getCollectorResults.js +25 -0
- package/dist/state/getCollectorResults.js.map +1 -0
- package/dist/state/historyStore.d.ts +35 -0
- package/dist/state/historyStore.d.ts.map +1 -0
- package/dist/state/historyStore.js +58 -0
- package/dist/state/historyStore.js.map +1 -0
- package/dist/state/uiStateBuilder.d.ts +12 -0
- package/dist/state/uiStateBuilder.d.ts.map +1 -0
- package/dist/state/uiStateBuilder.js +169 -0
- package/dist/state/uiStateBuilder.js.map +1 -0
- package/dist/state/uiStateScheduler.d.ts +43 -0
- package/dist/state/uiStateScheduler.d.ts.map +1 -0
- package/dist/state/uiStateScheduler.js +118 -0
- package/dist/state/uiStateScheduler.js.map +1 -0
- package/dist/ui/boot/sequence.d.ts +10 -0
- package/dist/ui/boot/sequence.d.ts.map +1 -0
- package/dist/ui/boot/sequence.js +173 -0
- package/dist/ui/boot/sequence.js.map +1 -0
- package/dist/ui/constraints/layoutSpec.d.ts +47 -0
- package/dist/ui/constraints/layoutSpec.d.ts.map +1 -0
- package/dist/ui/constraints/layoutSpec.js +60 -0
- package/dist/ui/constraints/layoutSpec.js.map +1 -0
- package/dist/ui/constraints/unknownHandling.d.ts +29 -0
- package/dist/ui/constraints/unknownHandling.d.ts.map +1 -0
- package/dist/ui/constraints/unknownHandling.js +60 -0
- package/dist/ui/constraints/unknownHandling.js.map +1 -0
- package/dist/ui/drilldowns/feed.d.ts +11 -0
- package/dist/ui/drilldowns/feed.d.ts.map +1 -0
- package/dist/ui/drilldowns/feed.js +68 -0
- package/dist/ui/drilldowns/feed.js.map +1 -0
- package/dist/ui/drilldowns/index.d.ts +7 -0
- package/dist/ui/drilldowns/index.d.ts.map +1 -0
- package/dist/ui/drilldowns/index.js +8 -0
- package/dist/ui/drilldowns/index.js.map +1 -0
- package/dist/ui/drilldowns/posture.d.ts +11 -0
- package/dist/ui/drilldowns/posture.d.ts.map +1 -0
- package/dist/ui/drilldowns/posture.js +74 -0
- package/dist/ui/drilldowns/posture.js.map +1 -0
- package/dist/ui/navigation/keymaps.d.ts +26 -0
- package/dist/ui/navigation/keymaps.d.ts.map +1 -0
- package/dist/ui/navigation/keymaps.js +135 -0
- package/dist/ui/navigation/keymaps.js.map +1 -0
- package/dist/ui/navigation/palette.d.ts +10 -0
- package/dist/ui/navigation/palette.d.ts.map +1 -0
- package/dist/ui/navigation/palette.js +133 -0
- package/dist/ui/navigation/palette.js.map +1 -0
- package/dist/ui/navigation/state.d.ts +47 -0
- package/dist/ui/navigation/state.d.ts.map +1 -0
- package/dist/ui/navigation/state.js +84 -0
- package/dist/ui/navigation/state.js.map +1 -0
- package/dist/ui/navigation/types.d.ts +38 -0
- package/dist/ui/navigation/types.d.ts.map +1 -0
- package/dist/ui/navigation/types.js +36 -0
- package/dist/ui/navigation/types.js.map +1 -0
- package/dist/ui/panels/active-assets.d.ts +12 -0
- package/dist/ui/panels/active-assets.d.ts.map +1 -0
- package/dist/ui/panels/active-assets.js +83 -0
- package/dist/ui/panels/active-assets.js.map +1 -0
- package/dist/ui/panels/capability-flags.d.ts +12 -0
- package/dist/ui/panels/capability-flags.d.ts.map +1 -0
- package/dist/ui/panels/capability-flags.js +59 -0
- package/dist/ui/panels/capability-flags.js.map +1 -0
- package/dist/ui/panels/command-surface.d.ts +12 -0
- package/dist/ui/panels/command-surface.d.ts.map +1 -0
- package/dist/ui/panels/command-surface.js +55 -0
- package/dist/ui/panels/command-surface.js.map +1 -0
- package/dist/ui/panels/network-origin.d.ts +12 -0
- package/dist/ui/panels/network-origin.d.ts.map +1 -0
- package/dist/ui/panels/network-origin.js +79 -0
- package/dist/ui/panels/network-origin.js.map +1 -0
- package/dist/ui/panels/operations-feed.d.ts +12 -0
- package/dist/ui/panels/operations-feed.d.ts.map +1 -0
- package/dist/ui/panels/operations-feed.js +90 -0
- package/dist/ui/panels/operations-feed.js.map +1 -0
- package/dist/ui/panels/posture.d.ts +12 -0
- package/dist/ui/panels/posture.d.ts.map +1 -0
- package/dist/ui/panels/posture.js +84 -0
- package/dist/ui/panels/posture.js.map +1 -0
- package/dist/ui/panels/resources.d.ts +11 -0
- package/dist/ui/panels/resources.d.ts.map +1 -0
- package/dist/ui/panels/resources.js +88 -0
- package/dist/ui/panels/resources.js.map +1 -0
- package/dist/ui/primitives/Panel.d.ts +25 -0
- package/dist/ui/primitives/Panel.d.ts.map +1 -0
- package/dist/ui/primitives/Panel.js +59 -0
- package/dist/ui/primitives/Panel.js.map +1 -0
- package/dist/ui/rendering/metricRenderer.d.ts +24 -0
- package/dist/ui/rendering/metricRenderer.d.ts.map +1 -0
- package/dist/ui/rendering/metricRenderer.js +86 -0
- package/dist/ui/rendering/metricRenderer.js.map +1 -0
- package/dist/ui/runtime/hub.d.ts +12 -0
- package/dist/ui/runtime/hub.d.ts.map +1 -0
- package/dist/ui/runtime/hub.js +468 -0
- package/dist/ui/runtime/hub.js.map +1 -0
- package/dist/ui/runtime/hubValidation.d.ts +23 -0
- package/dist/ui/runtime/hubValidation.d.ts.map +1 -0
- package/dist/ui/runtime/hubValidation.js +90 -0
- package/dist/ui/runtime/hubValidation.js.map +1 -0
- package/dist/ui/runtime/index.d.ts +29 -0
- package/dist/ui/runtime/index.d.ts.map +1 -0
- package/dist/ui/runtime/index.js +299 -0
- package/dist/ui/runtime/index.js.map +1 -0
- package/dist/ui/runtime/no-tui.d.ts +12 -0
- package/dist/ui/runtime/no-tui.d.ts.map +1 -0
- package/dist/ui/runtime/no-tui.js +77 -0
- package/dist/ui/runtime/no-tui.js.map +1 -0
- package/dist/ui/runtime/state-builder.d.ts +13 -0
- package/dist/ui/runtime/state-builder.d.ts.map +1 -0
- package/dist/ui/runtime/state-builder.js +114 -0
- package/dist/ui/runtime/state-builder.js.map +1 -0
- package/dist/ui/runtime/terminalSizeCheck.d.ts +10 -0
- package/dist/ui/runtime/terminalSizeCheck.d.ts.map +1 -0
- package/dist/ui/runtime/terminalSizeCheck.js +51 -0
- package/dist/ui/runtime/terminalSizeCheck.js.map +1 -0
- package/dist/ui/runtime/tuiLogGate.d.ts +22 -0
- package/dist/ui/runtime/tuiLogGate.d.ts.map +1 -0
- package/dist/ui/runtime/tuiLogGate.js +68 -0
- package/dist/ui/runtime/tuiLogGate.js.map +1 -0
- package/dist/ui/state/types.d.ts +72 -0
- package/dist/ui/state/types.d.ts.map +1 -0
- package/dist/ui/state/types.js +6 -0
- package/dist/ui/state/types.js.map +1 -0
- package/dist/ui/theme/borders.d.ts +20 -0
- package/dist/ui/theme/borders.d.ts.map +1 -0
- package/dist/ui/theme/borders.js +55 -0
- package/dist/ui/theme/borders.js.map +1 -0
- package/dist/ui/theme/tokens.d.ts +28 -0
- package/dist/ui/theme/tokens.d.ts.map +1 -0
- package/dist/ui/theme/tokens.js +50 -0
- package/dist/ui/theme/tokens.js.map +1 -0
- package/dist/ui/theme/typography.d.ts +14 -0
- package/dist/ui/theme/typography.d.ts.map +1 -0
- package/dist/ui/theme/typography.js +30 -0
- package/dist/ui/theme/typography.js.map +1 -0
- package/dist/ui/widgets/flagRow.d.ts +25 -0
- package/dist/ui/widgets/flagRow.d.ts.map +1 -0
- package/dist/ui/widgets/flagRow.js +57 -0
- package/dist/ui/widgets/flagRow.js.map +1 -0
- package/dist/ui/widgets/index.d.ts +9 -0
- package/dist/ui/widgets/index.d.ts.map +1 -0
- package/dist/ui/widgets/index.js +9 -0
- package/dist/ui/widgets/index.js.map +1 -0
- package/dist/ui/widgets/meter.d.ts +18 -0
- package/dist/ui/widgets/meter.d.ts.map +1 -0
- package/dist/ui/widgets/meter.js +38 -0
- package/dist/ui/widgets/meter.js.map +1 -0
- package/dist/ui/widgets/miniMap.d.ts +26 -0
- package/dist/ui/widgets/miniMap.d.ts.map +1 -0
- package/dist/ui/widgets/miniMap.js +94 -0
- package/dist/ui/widgets/miniMap.js.map +1 -0
- package/dist/ui/widgets/sparkline.d.ts +17 -0
- package/dist/ui/widgets/sparkline.d.ts.map +1 -0
- package/dist/ui/widgets/sparkline.js +63 -0
- package/dist/ui/widgets/sparkline.js.map +1 -0
- package/package.json +3 -2
- package/dist/ui/home-view.d.ts +0 -27
- package/dist/ui/home-view.d.ts.map +0 -1
- package/dist/ui/home-view.js +0 -127
- package/dist/ui/home-view.js.map +0 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Collector
|
|
3
|
+
* Phase 3: Origin class, public IP masked, latency, geo
|
|
4
|
+
* Runs slower (expensive checks)
|
|
5
|
+
*/
|
|
6
|
+
import { getSystemState } from '../system-state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Collect network context
|
|
9
|
+
* Expensive checks - should run slower (10-30s)
|
|
10
|
+
*/
|
|
11
|
+
export async function collectNetwork(appState) {
|
|
12
|
+
try {
|
|
13
|
+
let systemState;
|
|
14
|
+
try {
|
|
15
|
+
systemState = getSystemState(appState, false);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
systemState = null;
|
|
19
|
+
}
|
|
20
|
+
if (!systemState) {
|
|
21
|
+
return {
|
|
22
|
+
status: 'UNAVAILABLE',
|
|
23
|
+
asOf: Date.now(),
|
|
24
|
+
source: 'collector_network',
|
|
25
|
+
staleAfterMs: 30000, // Expensive - refresh every 30s
|
|
26
|
+
reasonCode: 'NO_SYSTEM_STATE',
|
|
27
|
+
message: 'System state not available',
|
|
28
|
+
action: 'system status',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const network = systemState.networkContext;
|
|
32
|
+
// Mask public IP (v1: return HIDDEN)
|
|
33
|
+
const publicIpMasked = "HIDDEN";
|
|
34
|
+
// Latency (simplified - would ping gateway)
|
|
35
|
+
const latencyMs = "UNKNOWN";
|
|
36
|
+
const data = {
|
|
37
|
+
originRegion: network.operatorOrigin.region || "UNKNOWN",
|
|
38
|
+
originClass: network.operatorOrigin.networkType,
|
|
39
|
+
gatewayRegion: network.targetInfrastructure.gatewayRegion || "UNKNOWN",
|
|
40
|
+
dbRegion: network.targetInfrastructure.databaseRegion || "NONE",
|
|
41
|
+
latencyMs,
|
|
42
|
+
latencyClass: network.targetInfrastructure.latencyClass,
|
|
43
|
+
publicIpMasked,
|
|
44
|
+
};
|
|
45
|
+
// Phase 9: Determine status
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
let status = 'LIVE';
|
|
48
|
+
let reasonCode;
|
|
49
|
+
let message;
|
|
50
|
+
let action;
|
|
51
|
+
if (!appState.gatewayConnected) {
|
|
52
|
+
status = 'UNAVAILABLE';
|
|
53
|
+
reasonCode = 'GATEWAY_NOT_CONNECTED';
|
|
54
|
+
message = 'Gateway not connected';
|
|
55
|
+
action = 'system connect';
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
status = 'LIVE';
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
status,
|
|
62
|
+
asOf: now,
|
|
63
|
+
data,
|
|
64
|
+
source: 'collector_network',
|
|
65
|
+
staleAfterMs: 30000, // Expensive - refresh every 30s
|
|
66
|
+
reasonCode,
|
|
67
|
+
message,
|
|
68
|
+
action,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return {
|
|
73
|
+
status: 'UNAVAILABLE',
|
|
74
|
+
asOf: Date.now(),
|
|
75
|
+
source: 'collector_network',
|
|
76
|
+
staleAfterMs: 30000,
|
|
77
|
+
reasonCode: 'COLLECTION_ERROR',
|
|
78
|
+
message: error.message || 'Unknown error',
|
|
79
|
+
action: 'system status',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=collector_network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector_network.js","sourceRoot":"","sources":["../../src/collectors/collector_network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAkB;IACrD,IAAI,CAAC;QACH,IAAI,WAAW,CAAC;QAChB,IAAI,CAAC;YACH,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,MAAM,EAAE,aAAgC;gBACxC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;gBAChB,MAAM,EAAE,mBAAmB;gBAC3B,YAAY,EAAE,KAAK,EAAE,gCAAgC;gBACrD,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,MAAM,EAAE,eAAe;aACxB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC;QAE3C,qCAAqC;QACrC,MAAM,cAAc,GAAW,QAAQ,CAAC;QAExC,4CAA4C;QAC5C,MAAM,SAAS,GAAuB,SAAS,CAAC;QAEhD,MAAM,IAAI,GAAgB;YACxB,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,SAAS;YACxD,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,WAAW;YAC/C,aAAa,EAAE,OAAO,CAAC,oBAAoB,CAAC,aAAa,IAAI,SAAS;YACtE,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,cAAc,IAAI,MAAM;YAC/D,SAAS;YACT,YAAY,EAAE,OAAO,CAAC,oBAAoB,CAAC,YAAY;YACvD,cAAc;SACf,CAAC;QAEF,4BAA4B;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,GAAoB,MAAM,CAAC;QACrC,IAAI,UAA8B,CAAC;QACnC,IAAI,OAA2B,CAAC;QAChC,IAAI,MAA0B,CAAC;QAE/B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC/B,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,uBAAuB,CAAC;YACrC,OAAO,GAAG,uBAAuB,CAAC;YAClC,MAAM,GAAG,gBAAgB,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,OAAO;YACL,MAAM;YACN,IAAI,EAAE,GAAG;YACT,IAAI;YACJ,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,KAAK,EAAE,gCAAgC;YACrD,UAAU;YACV,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;YACzC,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Posture Collector
|
|
3
|
+
* Phase 3: Derive dependencies, posture, risk, cause
|
|
4
|
+
*/
|
|
5
|
+
import type { CollectorResult } from '../core/types.js';
|
|
6
|
+
import type { AppState } from '../store.js';
|
|
7
|
+
export type PostureData = {
|
|
8
|
+
posture: "OPERATIONAL" | "DEGRADED" | "OFFLINE" | "CRITICAL" | "UNKNOWN";
|
|
9
|
+
risk: "LOW" | "ELEVATED" | "HIGH" | "UNKNOWN";
|
|
10
|
+
connected: boolean | "UNKNOWN";
|
|
11
|
+
target: string | "UNKNOWN";
|
|
12
|
+
lastChange: number | "UNKNOWN";
|
|
13
|
+
cause: string | "UNKNOWN";
|
|
14
|
+
dependencies: {
|
|
15
|
+
config: "OK" | "WARN" | "ERROR" | "UNKNOWN";
|
|
16
|
+
gateway: "OK" | "WARN" | "ERROR" | "UNKNOWN";
|
|
17
|
+
database: "OK" | "WARN" | "ERROR" | "UNKNOWN";
|
|
18
|
+
registry: "OK" | "WARN" | "ERROR" | "UNKNOWN";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Collect posture data
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectPosture(appState: AppState): Promise<CollectorResult<PostureData>>;
|
|
25
|
+
//# sourceMappingURL=collector_posture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector_posture.d.ts","sourceRoot":"","sources":["../../src/collectors/collector_posture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACzE,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE;QACZ,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;QAC5C,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;QAC7C,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;QAC9C,QAAQ,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KAC/C,CAAC;CACH,CAAC;AAmIF;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAiF9F"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Posture Collector
|
|
3
|
+
* Phase 3: Derive dependencies, posture, risk, cause
|
|
4
|
+
*/
|
|
5
|
+
// Track last posture change timestamp
|
|
6
|
+
let lastPostureChange = null;
|
|
7
|
+
let lastPosture = null;
|
|
8
|
+
/**
|
|
9
|
+
* Derive dependencies from app state
|
|
10
|
+
*/
|
|
11
|
+
function deriveDependencies(appState) {
|
|
12
|
+
const deps = {
|
|
13
|
+
config: "UNKNOWN",
|
|
14
|
+
gateway: "UNKNOWN",
|
|
15
|
+
database: "UNKNOWN",
|
|
16
|
+
registry: "UNKNOWN",
|
|
17
|
+
};
|
|
18
|
+
// Config: Check if system is ready
|
|
19
|
+
if (appState.systemReady) {
|
|
20
|
+
deps.config = "OK";
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
deps.config = "ERROR";
|
|
24
|
+
}
|
|
25
|
+
// Gateway: Check connection
|
|
26
|
+
if (appState.gatewayConnected && appState.gatewayClient) {
|
|
27
|
+
deps.gateway = "OK";
|
|
28
|
+
}
|
|
29
|
+
else if (appState.localMode) {
|
|
30
|
+
deps.gateway = "OK"; // Local mode doesn't need gateway
|
|
31
|
+
}
|
|
32
|
+
else if (appState.gatewayUrl) {
|
|
33
|
+
deps.gateway = "WARN"; // Has URL but not connected
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
deps.gateway = "ERROR";
|
|
37
|
+
}
|
|
38
|
+
// Database: Check if persistence is available
|
|
39
|
+
if (appState.gatewayConnected) {
|
|
40
|
+
deps.database = "OK";
|
|
41
|
+
}
|
|
42
|
+
else if (appState.localMode) {
|
|
43
|
+
deps.database = "WARN"; // Local mode = in-memory
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
deps.database = "ERROR";
|
|
47
|
+
}
|
|
48
|
+
// Registry: Check if agents are loaded
|
|
49
|
+
if (appState.customAgents.size >= 0) {
|
|
50
|
+
deps.registry = "OK";
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
deps.registry = "WARN";
|
|
54
|
+
}
|
|
55
|
+
return deps;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Derive posture from dependencies
|
|
59
|
+
* Deterministic rules
|
|
60
|
+
*/
|
|
61
|
+
function derivePosture(dependencies, connected) {
|
|
62
|
+
// If gateway=ERROR OR database=ERROR → posture = CRITICAL
|
|
63
|
+
if (dependencies.gateway === "ERROR" || dependencies.database === "ERROR") {
|
|
64
|
+
return "CRITICAL";
|
|
65
|
+
}
|
|
66
|
+
// Else if any dependency is WARN/ERROR → posture = DEGRADED
|
|
67
|
+
if (dependencies.config === "WARN" || dependencies.config === "ERROR" ||
|
|
68
|
+
dependencies.gateway === "WARN" ||
|
|
69
|
+
dependencies.database === "WARN" ||
|
|
70
|
+
dependencies.registry === "WARN" || dependencies.registry === "ERROR") {
|
|
71
|
+
return "DEGRADED";
|
|
72
|
+
}
|
|
73
|
+
// Else if connected=false → posture = OFFLINE (unless critical)
|
|
74
|
+
if (!connected) {
|
|
75
|
+
return "OFFLINE";
|
|
76
|
+
}
|
|
77
|
+
// Else posture = OPERATIONAL
|
|
78
|
+
return "OPERATIONAL";
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Derive risk from posture
|
|
82
|
+
*/
|
|
83
|
+
function deriveRisk(posture) {
|
|
84
|
+
if (posture === "CRITICAL")
|
|
85
|
+
return "HIGH";
|
|
86
|
+
if (posture === "DEGRADED")
|
|
87
|
+
return "ELEVATED";
|
|
88
|
+
if (posture === "OPERATIONAL")
|
|
89
|
+
return "LOW";
|
|
90
|
+
if (posture === "OFFLINE")
|
|
91
|
+
return "ELEVATED";
|
|
92
|
+
return "UNKNOWN";
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Derive cause from dependencies and posture
|
|
96
|
+
*/
|
|
97
|
+
function deriveCause(dependencies, posture) {
|
|
98
|
+
if (posture === "OPERATIONAL") {
|
|
99
|
+
return "UNKNOWN"; // Blank if operational
|
|
100
|
+
}
|
|
101
|
+
// Prioritize error messages
|
|
102
|
+
if (dependencies.gateway === "ERROR") {
|
|
103
|
+
return "Gateway connection failed";
|
|
104
|
+
}
|
|
105
|
+
if (dependencies.database === "ERROR") {
|
|
106
|
+
return "Database unavailable";
|
|
107
|
+
}
|
|
108
|
+
if (dependencies.config === "ERROR") {
|
|
109
|
+
return "Configuration error";
|
|
110
|
+
}
|
|
111
|
+
if (dependencies.registry === "ERROR") {
|
|
112
|
+
return "Registry load failed";
|
|
113
|
+
}
|
|
114
|
+
if (dependencies.gateway === "WARN") {
|
|
115
|
+
return "Gateway not connected";
|
|
116
|
+
}
|
|
117
|
+
if (dependencies.database === "WARN") {
|
|
118
|
+
return "Database not initialized";
|
|
119
|
+
}
|
|
120
|
+
return "UNKNOWN";
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Collect posture data
|
|
124
|
+
*/
|
|
125
|
+
export async function collectPosture(appState) {
|
|
126
|
+
try {
|
|
127
|
+
const dependencies = deriveDependencies(appState);
|
|
128
|
+
const connected = appState.gatewayConnected || appState.localMode;
|
|
129
|
+
const posture = derivePosture(dependencies, connected);
|
|
130
|
+
const risk = deriveRisk(posture);
|
|
131
|
+
const cause = deriveCause(dependencies, posture);
|
|
132
|
+
// Track last change
|
|
133
|
+
if (lastPosture !== null && lastPosture !== posture) {
|
|
134
|
+
lastPostureChange = Date.now();
|
|
135
|
+
}
|
|
136
|
+
lastPosture = posture;
|
|
137
|
+
const data = {
|
|
138
|
+
posture,
|
|
139
|
+
risk,
|
|
140
|
+
connected: connected ? true : false,
|
|
141
|
+
target: appState.gatewayUrl?.replace(/^https?:\/\//, '').substring(0, 30) || "UNKNOWN",
|
|
142
|
+
lastChange: lastPostureChange || "UNKNOWN",
|
|
143
|
+
cause,
|
|
144
|
+
dependencies,
|
|
145
|
+
};
|
|
146
|
+
// Phase 9: Determine status
|
|
147
|
+
const now = Date.now();
|
|
148
|
+
let status = 'LIVE';
|
|
149
|
+
let reasonCode;
|
|
150
|
+
let message;
|
|
151
|
+
let action;
|
|
152
|
+
if (dependencies.gateway === "ERROR" || dependencies.database === "ERROR") {
|
|
153
|
+
status = 'UNAVAILABLE';
|
|
154
|
+
reasonCode = dependencies.gateway === "ERROR" ? 'GATEWAY_ERROR' : 'DB_ERROR';
|
|
155
|
+
message = dependencies.gateway === "ERROR"
|
|
156
|
+
? 'Gateway connection failed'
|
|
157
|
+
: 'Database connection failed';
|
|
158
|
+
action = dependencies.gateway === "ERROR"
|
|
159
|
+
? 'system gateway status'
|
|
160
|
+
: 'system connect-db';
|
|
161
|
+
}
|
|
162
|
+
else if (!connected) {
|
|
163
|
+
status = 'UNAVAILABLE';
|
|
164
|
+
reasonCode = 'GATEWAY_NOT_CONNECTED';
|
|
165
|
+
message = 'Not connected to gateway';
|
|
166
|
+
action = 'system connect';
|
|
167
|
+
}
|
|
168
|
+
else if (dependencies.config === "ERROR") {
|
|
169
|
+
status = 'UNAVAILABLE';
|
|
170
|
+
reasonCode = 'CONFIG_ERROR';
|
|
171
|
+
message = 'Configuration error';
|
|
172
|
+
action = 'system config';
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
// Check if stale
|
|
176
|
+
const age = now - (lastPostureChange || now);
|
|
177
|
+
if (age > 2000) {
|
|
178
|
+
status = 'STALE';
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
status = 'LIVE';
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
status,
|
|
186
|
+
asOf: now,
|
|
187
|
+
data,
|
|
188
|
+
source: 'collector_posture',
|
|
189
|
+
staleAfterMs: 2000,
|
|
190
|
+
reasonCode,
|
|
191
|
+
message,
|
|
192
|
+
action,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
return {
|
|
197
|
+
status: 'UNAVAILABLE',
|
|
198
|
+
asOf: Date.now(),
|
|
199
|
+
source: 'collector_posture',
|
|
200
|
+
staleAfterMs: 2000,
|
|
201
|
+
reasonCode: 'COLLECTION_ERROR',
|
|
202
|
+
message: error.message || 'Unknown error',
|
|
203
|
+
action: 'system status',
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=collector_posture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector_posture.js","sourceRoot":"","sources":["../../src/collectors/collector_posture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,sCAAsC;AACtC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAC5C,IAAI,WAAW,GAAkC,IAAI,CAAC;AAEtD;;GAEG;AACH,SAAS,kBAAkB,CAAC,QAAkB;IAC5C,MAAM,IAAI,GAAgC;QACxC,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,SAAS;KACpB,CAAC;IAEF,mCAAmC;IACnC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;SAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,kCAAkC;IACzD,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,4BAA4B;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,8CAA8C;IAC9C,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,yBAAyB;IACnD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,uCAAuC;IACvC,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,YAAyC,EACzC,SAAkB;IAElB,0DAA0D;IAC1D,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC1E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,IACE,YAAY,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO;QACjE,YAAY,CAAC,OAAO,KAAK,MAAM;QAC/B,YAAY,CAAC,QAAQ,KAAK,MAAM;QAChC,YAAY,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EACrE,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6BAA6B;IAC7B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,OAA+B;IACjD,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC9C,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,YAAyC,EACzC,OAA+B;IAE/B,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC,CAAC,uBAAuB;IAC3C,CAAC;IAED,4BAA4B;IAC5B,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACrC,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACpC,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO,uBAAuB,CAAC;IACjC,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAkB;IACrD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,SAAS,CAAC;QAClE,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEjD,oBAAoB;QACpB,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YACpD,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,WAAW,GAAG,OAAO,CAAC;QAEtB,MAAM,IAAI,GAAgB;YACxB,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YACnC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS;YACtF,UAAU,EAAE,iBAAiB,IAAI,SAAS;YAC1C,KAAK;YACL,YAAY;SACb,CAAC;QAEF,4BAA4B;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,GAAoB,MAAM,CAAC;QACrC,IAAI,UAA8B,CAAC;QACnC,IAAI,OAA2B,CAAC;QAChC,IAAI,MAA0B,CAAC;QAE/B,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC1E,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7E,OAAO,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO;gBACxC,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,4BAA4B,CAAC;YACjC,MAAM,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO;gBACvC,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,mBAAmB,CAAC;QAC1B,CAAC;aAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,uBAAuB,CAAC;YACrC,OAAO,GAAG,0BAA0B,CAAC;YACrC,MAAM,GAAG,gBAAgB,CAAC;QAC5B,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC3C,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,cAAc,CAAC;YAC5B,OAAO,GAAG,qBAAqB,CAAC;YAChC,MAAM,GAAG,eAAe,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC;YAC7C,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,OAAO,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM;YACN,IAAI,EAAE,GAAG;YACT,IAAI;YACJ,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,IAAI;YAClB,UAAU;YACV,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;YACzC,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resources Collector
|
|
3
|
+
* Phase 3: Read CPU%, load, RAM, disk, uptime, proc count
|
|
4
|
+
*/
|
|
5
|
+
import type { CollectorResult } from '../core/types.js';
|
|
6
|
+
export type ResourcesData = {
|
|
7
|
+
cpuPercent: number | "UNKNOWN";
|
|
8
|
+
load1m: number | "UNKNOWN";
|
|
9
|
+
ramUsedMb: number | "UNKNOWN";
|
|
10
|
+
ramTotalMb: number | "UNKNOWN";
|
|
11
|
+
diskUsedGb: number | "UNKNOWN";
|
|
12
|
+
diskTotalGb: number | "UNKNOWN";
|
|
13
|
+
uptimeSec: number | "UNKNOWN";
|
|
14
|
+
procCount: number | "UNKNOWN";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Collect system resources
|
|
18
|
+
* Must work on Linux + degrade gracefully elsewhere
|
|
19
|
+
*/
|
|
20
|
+
export declare function collectResources(): Promise<CollectorResult<ResourcesData>>;
|
|
21
|
+
//# sourceMappingURL=collector_resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector_resources.d.ts","sourceRoot":"","sources":["../../src/collectors/collector_resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AAEzE,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CA+EhF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resources Collector
|
|
3
|
+
* Phase 3: Read CPU%, load, RAM, disk, uptime, proc count
|
|
4
|
+
*/
|
|
5
|
+
import * as os from 'os';
|
|
6
|
+
/**
|
|
7
|
+
* Collect system resources
|
|
8
|
+
* Must work on Linux + degrade gracefully elsewhere
|
|
9
|
+
*/
|
|
10
|
+
export async function collectResources() {
|
|
11
|
+
try {
|
|
12
|
+
const data = {
|
|
13
|
+
// CPU - simplified (would need actual monitoring)
|
|
14
|
+
cpuPercent: "UNKNOWN",
|
|
15
|
+
// Load average (1 minute)
|
|
16
|
+
load1m: (() => {
|
|
17
|
+
try {
|
|
18
|
+
const load = os.loadavg();
|
|
19
|
+
if (load && load.length > 0) {
|
|
20
|
+
return load[0];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Not available on Windows
|
|
25
|
+
}
|
|
26
|
+
return "UNKNOWN";
|
|
27
|
+
})(),
|
|
28
|
+
// RAM
|
|
29
|
+
ramUsedMb: (() => {
|
|
30
|
+
try {
|
|
31
|
+
const total = os.totalmem();
|
|
32
|
+
const free = os.freemem();
|
|
33
|
+
const used = total - free;
|
|
34
|
+
return Math.round(used / 1024 / 1024);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return "UNKNOWN";
|
|
38
|
+
}
|
|
39
|
+
})(),
|
|
40
|
+
ramTotalMb: (() => {
|
|
41
|
+
try {
|
|
42
|
+
const total = os.totalmem();
|
|
43
|
+
return Math.round(total / 1024 / 1024);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return "UNKNOWN";
|
|
47
|
+
}
|
|
48
|
+
})(),
|
|
49
|
+
// Disk - simplified (would need actual disk monitoring)
|
|
50
|
+
diskUsedGb: "UNKNOWN",
|
|
51
|
+
diskTotalGb: "UNKNOWN",
|
|
52
|
+
// Uptime
|
|
53
|
+
uptimeSec: (() => {
|
|
54
|
+
try {
|
|
55
|
+
return os.uptime();
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return "UNKNOWN";
|
|
59
|
+
}
|
|
60
|
+
})(),
|
|
61
|
+
// Process count - simplified
|
|
62
|
+
procCount: "UNKNOWN",
|
|
63
|
+
};
|
|
64
|
+
// Phase 9: Resources are usually LIVE if collected successfully
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const status = 'LIVE';
|
|
67
|
+
return {
|
|
68
|
+
status,
|
|
69
|
+
asOf: now,
|
|
70
|
+
data,
|
|
71
|
+
source: 'collector_resources',
|
|
72
|
+
staleAfterMs: 2000, // Refresh every 2s
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
return {
|
|
77
|
+
status: 'UNAVAILABLE',
|
|
78
|
+
asOf: Date.now(),
|
|
79
|
+
source: 'collector_resources',
|
|
80
|
+
staleAfterMs: 2000,
|
|
81
|
+
reasonCode: 'COLLECTION_ERROR',
|
|
82
|
+
message: error.message || 'Unknown error',
|
|
83
|
+
action: 'system resources',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=collector_resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector_resources.js","sourceRoot":"","sources":["../../src/collectors/collector_resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAczB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAkB;YAC1B,kDAAkD;YAClD,UAAU,EAAE,SAAS;YAErB,0BAA0B;YAC1B,MAAM,EAAE,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;oBAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC,EAAE;YAEJ,MAAM;YACN,SAAS,EAAE,CAAC,GAAG,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;oBAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,EAAE;YAEJ,UAAU,EAAE,CAAC,GAAG,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,EAAE;YAEJ,wDAAwD;YACxD,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,SAAS;YAEtB,SAAS;YACT,SAAS,EAAE,CAAC,GAAG,EAAE;gBACf,IAAI,CAAC;oBACH,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,EAAE;YAEJ,6BAA6B;YAC7B,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,gEAAgE;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAoB,MAAM,CAAC;QAEvC,OAAO;YACL,MAAM;YACN,IAAI,EAAE,GAAG;YACT,IAAI;YACJ,MAAM,EAAE,qBAAqB;YAC7B,YAAY,EAAE,IAAI,EAAE,mBAAmB;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,qBAAqB;YAC7B,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe;YACzC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector Helpers
|
|
3
|
+
* Phase 9: Helper functions for collector contract compliance
|
|
4
|
+
*/
|
|
5
|
+
import type { CollectorResult, CollectorStatus } from '../core/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Convert old-style collector result to new contract
|
|
8
|
+
* Temporary migration helper
|
|
9
|
+
*/
|
|
10
|
+
export declare function toNewCollectorResult<T>(oldResult: {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
data?: T;
|
|
13
|
+
ts: number;
|
|
14
|
+
source: string;
|
|
15
|
+
staleAfterMs: number;
|
|
16
|
+
error?: {
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
}, determineStatus?: (oldResult: any) => CollectorStatus): CollectorResult<T>;
|
|
21
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/collectors/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,SAAS,EAAE;IACT,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,EACD,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,eAAe,GACpD,eAAe,CAAC,CAAC,CAAC,CAyCpB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector Helpers
|
|
3
|
+
* Phase 9: Helper functions for collector contract compliance
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert old-style collector result to new contract
|
|
7
|
+
* Temporary migration helper
|
|
8
|
+
*/
|
|
9
|
+
export function toNewCollectorResult(oldResult, determineStatus) {
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
// Determine status
|
|
12
|
+
let status;
|
|
13
|
+
if (determineStatus) {
|
|
14
|
+
status = determineStatus(oldResult);
|
|
15
|
+
}
|
|
16
|
+
else if (!oldResult.ok) {
|
|
17
|
+
status = 'UNAVAILABLE';
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// Check if stale
|
|
21
|
+
const age = now - oldResult.ts;
|
|
22
|
+
if (age > oldResult.staleAfterMs) {
|
|
23
|
+
status = 'STALE';
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
status = 'LIVE';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Build new result
|
|
30
|
+
const result = {
|
|
31
|
+
status,
|
|
32
|
+
asOf: oldResult.ts,
|
|
33
|
+
source: oldResult.source,
|
|
34
|
+
staleAfterMs: oldResult.staleAfterMs,
|
|
35
|
+
};
|
|
36
|
+
// Add data for LIVE/STALE
|
|
37
|
+
if (status === 'LIVE' || status === 'STALE') {
|
|
38
|
+
result.data = oldResult.data;
|
|
39
|
+
}
|
|
40
|
+
// Add reasonCode/message/action for UNAVAILABLE/DISABLED
|
|
41
|
+
if (status === 'UNAVAILABLE' || status === 'DISABLED') {
|
|
42
|
+
if (oldResult.error) {
|
|
43
|
+
result.reasonCode = oldResult.error.code;
|
|
44
|
+
result.message = oldResult.error.message;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/collectors/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAOC,EACD,eAAqD;IAErD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,mBAAmB;IACnB,IAAI,MAAuB,CAAC;IAC5B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,aAAa,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,iBAAiB;QACjB,MAAM,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;YACjC,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAuB;QACjC,MAAM;QACN,IAAI,EAAE,SAAS,CAAC,EAAE;QAClB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,YAAY,EAAE,SAAS,CAAC,YAAY;KACrC,CAAC;IAEF,0BAA0B;IAC1B,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,yDAAyD;IACzD,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACtD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YACzC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector Registry
|
|
3
|
+
* Phase 8: Panel-to-collector integrity
|
|
4
|
+
*/
|
|
5
|
+
import { collectPosture } from '../collectors/collector_posture.js';
|
|
6
|
+
import { collectNetwork } from '../collectors/collector_network.js';
|
|
7
|
+
import { collectResources } from '../collectors/collector_resources.js';
|
|
8
|
+
import { collectAssets } from '../collectors/collector_assets.js';
|
|
9
|
+
import { collectCapabilities } from '../collectors/collector_capabilities.js';
|
|
10
|
+
import { collectFeed } from '../collectors/collector_feed.js';
|
|
11
|
+
import { collectGeo } from '../collectors/collector_geo.js';
|
|
12
|
+
import type { AppState } from '../store.js';
|
|
13
|
+
import type { CollectorResult } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Collector registry - single source of truth
|
|
16
|
+
* Maps panel IDs to collector functions
|
|
17
|
+
*/
|
|
18
|
+
export declare const collectorRegistry: {
|
|
19
|
+
readonly posture: typeof collectPosture;
|
|
20
|
+
readonly network: typeof collectNetwork;
|
|
21
|
+
readonly resources: typeof collectResources;
|
|
22
|
+
readonly assets: typeof collectAssets;
|
|
23
|
+
readonly capabilities: typeof collectCapabilities;
|
|
24
|
+
readonly feed: typeof collectFeed;
|
|
25
|
+
readonly geo: typeof collectGeo;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Panel-to-collector mapping
|
|
29
|
+
* Every panel must reference a valid collector key
|
|
30
|
+
*/
|
|
31
|
+
export declare const panelToCollectorMap: Record<string, keyof typeof collectorRegistry>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate that all hub panels reference valid collectors
|
|
34
|
+
*/
|
|
35
|
+
export declare function validatePanelCollectorIntegrity(panelIds: string[], throwOnError?: boolean): {
|
|
36
|
+
valid: boolean;
|
|
37
|
+
errors: string[];
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Get collector function for a panel
|
|
41
|
+
*/
|
|
42
|
+
export declare function getCollectorForPanel(panelId: string): ((appState: AppState) => Promise<CollectorResult<any>>) | null;
|
|
43
|
+
//# sourceMappingURL=collectorRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectorRegistry.d.ts","sourceRoot":"","sources":["../../src/core/collectorRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,iBAAiB,CASrE,CAAC;AAEX;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAAE,EAClB,YAAY,GAAE,OAAe,GAC5B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAYpH"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector Registry
|
|
3
|
+
* Phase 8: Panel-to-collector integrity
|
|
4
|
+
*/
|
|
5
|
+
import { collectPosture } from '../collectors/collector_posture.js';
|
|
6
|
+
import { collectNetwork } from '../collectors/collector_network.js';
|
|
7
|
+
import { collectResources } from '../collectors/collector_resources.js';
|
|
8
|
+
import { collectAssets } from '../collectors/collector_assets.js';
|
|
9
|
+
import { collectCapabilities } from '../collectors/collector_capabilities.js';
|
|
10
|
+
import { collectFeed } from '../collectors/collector_feed.js';
|
|
11
|
+
import { collectGeo } from '../collectors/collector_geo.js';
|
|
12
|
+
/**
|
|
13
|
+
* Collector registry - single source of truth
|
|
14
|
+
* Maps panel IDs to collector functions
|
|
15
|
+
*/
|
|
16
|
+
export const collectorRegistry = {
|
|
17
|
+
posture: collectPosture,
|
|
18
|
+
network: collectNetwork,
|
|
19
|
+
resources: collectResources,
|
|
20
|
+
assets: collectAssets,
|
|
21
|
+
capabilities: collectCapabilities,
|
|
22
|
+
feed: collectFeed,
|
|
23
|
+
geo: collectGeo,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Panel-to-collector mapping
|
|
27
|
+
* Every panel must reference a valid collector key
|
|
28
|
+
*/
|
|
29
|
+
export const panelToCollectorMap = {
|
|
30
|
+
POSTURE: 'posture',
|
|
31
|
+
RESOURCES: 'resources',
|
|
32
|
+
ASSETS: 'assets',
|
|
33
|
+
FEED: 'feed',
|
|
34
|
+
NETWORK: 'network',
|
|
35
|
+
CAPABILITIES: 'capabilities',
|
|
36
|
+
// GEO INTEL uses 'geo' collector
|
|
37
|
+
'GEO INTEL': 'geo',
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Validate that all hub panels reference valid collectors
|
|
41
|
+
*/
|
|
42
|
+
export function validatePanelCollectorIntegrity(panelIds, throwOnError = false) {
|
|
43
|
+
const errors = [];
|
|
44
|
+
panelIds.forEach(panelId => {
|
|
45
|
+
const collectorKey = panelToCollectorMap[panelId];
|
|
46
|
+
if (!collectorKey) {
|
|
47
|
+
errors.push(`Panel "${panelId}" has no collector mapping`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!collectorRegistry[collectorKey]) {
|
|
51
|
+
errors.push(`Panel "${panelId}" references missing collector "${collectorKey}"`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (errors.length > 0 && throwOnError) {
|
|
55
|
+
throw new Error(`Panel-collector integrity check failed:\n${errors.join('\n')}`);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
valid: errors.length === 0,
|
|
59
|
+
errors,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get collector function for a panel
|
|
64
|
+
*/
|
|
65
|
+
export function getCollectorForPanel(panelId) {
|
|
66
|
+
const collectorKey = panelToCollectorMap[panelId];
|
|
67
|
+
if (!collectorKey) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const collector = collectorRegistry[collectorKey];
|
|
71
|
+
if (!collector) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return collector;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=collectorRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectorRegistry.js","sourceRoot":"","sources":["../../src/core/collectorRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAK5D;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE,aAAa;IACrB,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;CACP,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAmD;IACjF,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,cAAc;IAC5B,iCAAiC;IACjC,WAAW,EAAE,KAAK;CACV,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAAkB,EAClB,eAAwB,KAAK;IAE7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,4BAA4B,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,mCAAmC,YAAY,GAAG,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,4CAA4C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,SAAkE,CAAC;AAC5E,CAAC"}
|