@agent-vm/agent-vm 0.0.96 → 0.0.98

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.
Files changed (80) hide show
  1. package/dist/cli/build-command.d.ts +3 -0
  2. package/dist/cli/build-command.d.ts.map +1 -1
  3. package/dist/cli/build-command.js +72 -0
  4. package/dist/cli/build-command.js.map +1 -1
  5. package/dist/cli/commands/build-definition.d.ts +2 -0
  6. package/dist/cli/commands/build-definition.d.ts.map +1 -1
  7. package/dist/cli/commands/build-definition.js +6 -1
  8. package/dist/cli/commands/build-definition.js.map +1 -1
  9. package/dist/cli/commands/controller-definition.d.ts +20 -20
  10. package/dist/cli/commands/create-app.d.ts +22 -20
  11. package/dist/cli/commands/create-app.d.ts.map +1 -1
  12. package/dist/cli/manual-templates.d.ts.map +1 -1
  13. package/dist/cli/manual-templates.js +34 -9
  14. package/dist/cli/manual-templates.js.map +1 -1
  15. package/dist/config/system-config.d.ts +119 -3
  16. package/dist/config/system-config.d.ts.map +1 -1
  17. package/dist/config/system-config.js +328 -11
  18. package/dist/config/system-config.js.map +1 -1
  19. package/dist/controller/controller-runtime-types.d.ts +3 -0
  20. package/dist/controller/controller-runtime-types.d.ts.map +1 -1
  21. package/dist/controller/controller-runtime.d.ts.map +1 -1
  22. package/dist/controller/controller-runtime.js +93 -22
  23. package/dist/controller/controller-runtime.js.map +1 -1
  24. package/dist/controller/zone-runtimes/openclaw-zone-runtime.d.ts +1 -0
  25. package/dist/controller/zone-runtimes/openclaw-zone-runtime.d.ts.map +1 -1
  26. package/dist/controller/zone-runtimes/openclaw-zone-runtime.js +4 -0
  27. package/dist/controller/zone-runtimes/openclaw-zone-runtime.js.map +1 -1
  28. package/dist/controller/zone-runtimes/zone-runtime-types.d.ts +1 -0
  29. package/dist/controller/zone-runtimes/zone-runtime-types.d.ts.map +1 -1
  30. package/dist/gateway/credential-manager.d.ts +1 -0
  31. package/dist/gateway/credential-manager.d.ts.map +1 -1
  32. package/dist/gateway/credential-manager.js +14 -1
  33. package/dist/gateway/credential-manager.js.map +1 -1
  34. package/dist/gateway/gateway-zone-orchestrator.d.ts +3 -1
  35. package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -1
  36. package/dist/gateway/gateway-zone-orchestrator.js +70 -3
  37. package/dist/gateway/gateway-zone-orchestrator.js.map +1 -1
  38. package/dist/gateway/gateway-zone-support.d.ts +5 -1
  39. package/dist/gateway/gateway-zone-support.d.ts.map +1 -1
  40. package/dist/gateway/gateway-zone-support.js +35 -1
  41. package/dist/gateway/gateway-zone-support.js.map +1 -1
  42. package/dist/observability/observability-compose.d.ts +24 -0
  43. package/dist/observability/observability-compose.d.ts.map +1 -0
  44. package/dist/observability/observability-compose.js +144 -0
  45. package/dist/observability/observability-compose.js.map +1 -0
  46. package/dist/observability/observability-config.d.ts +62 -0
  47. package/dist/observability/observability-config.d.ts.map +1 -0
  48. package/dist/observability/observability-config.js +60 -0
  49. package/dist/observability/observability-config.js.map +1 -0
  50. package/dist/observability/observability-lifecycle.d.ts +27 -0
  51. package/dist/observability/observability-lifecycle.d.ts.map +1 -0
  52. package/dist/observability/observability-lifecycle.js +101 -0
  53. package/dist/observability/observability-lifecycle.js.map +1 -0
  54. package/dist/observability/observability-readiness.d.ts +17 -0
  55. package/dist/observability/observability-readiness.d.ts.map +1 -0
  56. package/dist/observability/observability-readiness.js +141 -0
  57. package/dist/observability/observability-readiness.js.map +1 -0
  58. package/dist/observability/otel-collector-config.d.ts +70 -0
  59. package/dist/observability/otel-collector-config.d.ts.map +1 -0
  60. package/dist/observability/otel-collector-config.js +179 -0
  61. package/dist/observability/otel-collector-config.js.map +1 -0
  62. package/dist/operations/agent-secret-access-checks.d.ts +8 -0
  63. package/dist/operations/agent-secret-access-checks.d.ts.map +1 -0
  64. package/dist/operations/agent-secret-access-checks.js +35 -0
  65. package/dist/operations/agent-secret-access-checks.js.map +1 -0
  66. package/dist/operations/config-validation.d.ts.map +1 -1
  67. package/dist/operations/config-validation.js +2 -0
  68. package/dist/operations/config-validation.js.map +1 -1
  69. package/dist/operations/doctor.d.ts.map +1 -1
  70. package/dist/operations/doctor.js +22 -1
  71. package/dist/operations/doctor.js.map +1 -1
  72. package/dist/tool-vm/tool-vm-lifecycle.d.ts +1 -0
  73. package/dist/tool-vm/tool-vm-lifecycle.d.ts.map +1 -1
  74. package/dist/tool-vm/tool-vm-lifecycle.js +6 -0
  75. package/dist/tool-vm/tool-vm-lifecycle.js.map +1 -1
  76. package/dist/tool-vm/tool-vm-secret-selection.d.ts +16 -0
  77. package/dist/tool-vm/tool-vm-secret-selection.d.ts.map +1 -0
  78. package/dist/tool-vm/tool-vm-secret-selection.js +47 -0
  79. package/dist/tool-vm/tool-vm-secret-selection.js.map +1 -0
  80. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-zone-support.js","sourceRoot":"","sources":["../../src/gateway/gateway-zone-support.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-zone-support.js","sourceRoot":"","sources":["../../src/gateway/gateway-zone-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ManagedObservabilityRuntimeConfig } from './observability-config.js';
2
+ export interface ObservabilityComposeService {
3
+ readonly image: string;
4
+ readonly command?: readonly string[];
5
+ readonly environment?: readonly string[];
6
+ readonly ports: readonly ObservabilityComposePort[];
7
+ readonly restart: 'unless-stopped';
8
+ readonly user?: string;
9
+ readonly volumes: readonly string[];
10
+ readonly depends_on?: readonly string[];
11
+ }
12
+ export interface ObservabilityComposePort {
13
+ readonly hostIp: string;
14
+ readonly protocol: 'tcp';
15
+ readonly published: number;
16
+ readonly target: number;
17
+ }
18
+ export interface ObservabilityComposeModel {
19
+ readonly name: string;
20
+ readonly services: Record<string, ObservabilityComposeService>;
21
+ }
22
+ export declare function createObservabilityComposeModel(config: ManagedObservabilityRuntimeConfig): ObservabilityComposeModel;
23
+ export declare function renderObservabilityComposeYaml(model: ObservabilityComposeModel): string;
24
+ //# sourceMappingURL=observability-compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-compose.d.ts","sourceRoot":"","sources":["../../src/observability/observability-compose.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIX,iCAAiC,EACjC,MAAM,2BAA2B,CAAC;AAOnC,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;CAC/D;AA0DD,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,iCAAiC,GACvC,yBAAyB,CA6D3B;AAkBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,yBAAyB,GAAG,MAAM,CAqBvF"}
@@ -0,0 +1,144 @@
1
+ import path from 'node:path';
2
+ const VICTORIA_METRICS_IMAGE = 'victoriametrics/victoria-metrics:v1.144.0';
3
+ const VICTORIA_LOGS_IMAGE = 'victoriametrics/victoria-logs:v1.50.0';
4
+ const VICTORIA_TRACES_IMAGE = 'victoriametrics/victoria-traces:v0.9.2';
5
+ const OTEL_COLLECTOR_IMAGE = 'otel/opentelemetry-collector-contrib:0.116.1';
6
+ function createLoopbackPort(bindAddress, hostPort, containerPort) {
7
+ return {
8
+ hostIp: bindAddress,
9
+ protocol: 'tcp',
10
+ published: hostPort,
11
+ target: containerPort,
12
+ };
13
+ }
14
+ function renderBaseRetentionFlags(retention) {
15
+ return [
16
+ `-retentionPeriod=${retention.period}`,
17
+ ...(retention.minFreeDiskSpaceBytes === undefined
18
+ ? []
19
+ : [`-storage.minFreeDiskSpaceBytes=${retention.minFreeDiskSpaceBytes}`]),
20
+ ];
21
+ }
22
+ function renderByteBoundedRetentionFlags(retention) {
23
+ return [
24
+ ...renderBaseRetentionFlags(retention),
25
+ ...(retention.maxDiskSpaceUsageBytes === undefined
26
+ ? []
27
+ : [`-retention.maxDiskSpaceUsageBytes=${retention.maxDiskSpaceUsageBytes}`]),
28
+ ];
29
+ }
30
+ function renderDiskBoundedRetentionFlags(retention) {
31
+ return [
32
+ ...renderBaseRetentionFlags(retention),
33
+ ...(retention.maxDiskSpaceUsageBytes === undefined
34
+ ? []
35
+ : [`-retention.maxDiskSpaceUsageBytes=${retention.maxDiskSpaceUsageBytes}`]),
36
+ ...(retention.maxDiskUsagePercent === undefined
37
+ ? []
38
+ : [`-retention.maxDiskUsagePercent=${String(retention.maxDiskUsagePercent)}`]),
39
+ ];
40
+ }
41
+ function resolveHostUserSpec() {
42
+ const getuid = process.getuid;
43
+ const getgid = process.getgid;
44
+ if (typeof getuid !== 'function' || typeof getgid !== 'function') {
45
+ return undefined;
46
+ }
47
+ return `${String(getuid())}:${String(getgid())}`;
48
+ }
49
+ export function createObservabilityComposeModel(config) {
50
+ const hostUserSpec = resolveHostUserSpec();
51
+ return {
52
+ name: config.projectName,
53
+ services: {
54
+ 'victoria-metrics': {
55
+ image: VICTORIA_METRICS_IMAGE,
56
+ command: [
57
+ '-storageDataPath=/victoria-metrics-data',
58
+ ...renderBaseRetentionFlags(config.retention.metrics),
59
+ ],
60
+ ports: [createLoopbackPort(config.bindAddress, config.ports.metrics, 8428)],
61
+ restart: 'unless-stopped',
62
+ ...(hostUserSpec === undefined ? {} : { user: hostUserSpec }),
63
+ volumes: [path.join(config.dataDir, 'metrics') + ':/victoria-metrics-data'],
64
+ },
65
+ 'victoria-logs': {
66
+ image: VICTORIA_LOGS_IMAGE,
67
+ command: [
68
+ '-storageDataPath=/victoria-logs-data',
69
+ ...renderByteBoundedRetentionFlags(config.retention.logs),
70
+ ],
71
+ ports: [createLoopbackPort(config.bindAddress, config.ports.logs, 9428)],
72
+ restart: 'unless-stopped',
73
+ ...(hostUserSpec === undefined ? {} : { user: hostUserSpec }),
74
+ volumes: [path.join(config.dataDir, 'logs') + ':/victoria-logs-data'],
75
+ },
76
+ 'victoria-traces': {
77
+ image: VICTORIA_TRACES_IMAGE,
78
+ command: [
79
+ '-storageDataPath=/victoria-traces-data',
80
+ ...renderDiskBoundedRetentionFlags(config.retention.traces),
81
+ ],
82
+ ports: [createLoopbackPort(config.bindAddress, config.ports.traces, 10_428)],
83
+ restart: 'unless-stopped',
84
+ ...(hostUserSpec === undefined ? {} : { user: hostUserSpec }),
85
+ volumes: [path.join(config.dataDir, 'traces') + ':/victoria-traces-data'],
86
+ },
87
+ 'otel-collector': {
88
+ image: OTEL_COLLECTOR_IMAGE,
89
+ command: ['--config=/etc/otelcol/config.yaml'],
90
+ depends_on: ['victoria-metrics', 'victoria-logs', 'victoria-traces'],
91
+ environment: [
92
+ 'HTTP_PROXY=',
93
+ 'HTTPS_PROXY=',
94
+ 'NO_PROXY=victoria-metrics,victoria-logs,victoria-traces,localhost,127.0.0.1,::1',
95
+ ],
96
+ ports: [
97
+ createLoopbackPort(config.bindAddress, config.ports.collectorGrpc, 4317),
98
+ createLoopbackPort(config.bindAddress, config.ports.collectorHttp, 4318),
99
+ createLoopbackPort(config.bindAddress, config.ports.collectorHealth, 13_133),
100
+ ],
101
+ restart: 'unless-stopped',
102
+ ...(hostUserSpec === undefined ? {} : { user: hostUserSpec }),
103
+ volumes: [
104
+ path.join(config.runtimeDir, 'otel-collector-config.yaml') +
105
+ ':/etc/otelcol/config.yaml:ro',
106
+ ],
107
+ },
108
+ },
109
+ };
110
+ }
111
+ function renderYamlArray(indent, values) {
112
+ return values.map((value) => `${indent}- ${JSON.stringify(value)}`);
113
+ }
114
+ function renderYamlPorts(indent, ports) {
115
+ return ports.flatMap((port) => [
116
+ `${indent}- host_ip: ${JSON.stringify(port.hostIp)}`,
117
+ `${indent} published: ${JSON.stringify(String(port.published))}`,
118
+ `${indent} target: ${String(port.target)}`,
119
+ `${indent} protocol: ${port.protocol}`,
120
+ ]);
121
+ }
122
+ export function renderObservabilityComposeYaml(model) {
123
+ const lines = [`name: ${JSON.stringify(model.name)}`, 'services:'];
124
+ for (const [serviceName, service] of Object.entries(model.services)) {
125
+ lines.push(` ${serviceName}:`, ` image: ${service.image}`);
126
+ if (service.command !== undefined) {
127
+ lines.push(' command:', ...renderYamlArray(' ', service.command));
128
+ }
129
+ if (service.depends_on !== undefined) {
130
+ lines.push(' depends_on:', ...renderYamlArray(' ', service.depends_on));
131
+ }
132
+ if (service.environment !== undefined) {
133
+ lines.push(' environment:', ...renderYamlArray(' ', service.environment));
134
+ }
135
+ lines.push(` restart: ${service.restart}`);
136
+ if (service.user !== undefined) {
137
+ lines.push(` user: ${JSON.stringify(service.user)}`);
138
+ }
139
+ lines.push(' ports:', ...renderYamlPorts(' ', service.ports));
140
+ lines.push(' volumes:', ...renderYamlArray(' ', service.volumes));
141
+ }
142
+ return `${lines.join('\n')}\n`;
143
+ }
144
+ //# sourceMappingURL=observability-compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-compose.js","sourceRoot":"","sources":["../../src/observability/observability-compose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { LoadedSystemConfig } from '../config/system-config.js';
2
+ export interface ObservabilityBaseRetentionPolicy {
3
+ readonly period: string;
4
+ readonly minFreeDiskSpaceBytes?: string | undefined;
5
+ }
6
+ export interface ObservabilityByteBoundedRetentionPolicy extends ObservabilityBaseRetentionPolicy {
7
+ readonly maxDiskSpaceUsageBytes?: string | undefined;
8
+ }
9
+ export interface ObservabilityDiskBoundedRetentionPolicy extends ObservabilityBaseRetentionPolicy {
10
+ readonly maxDiskSpaceUsageBytes?: string | undefined;
11
+ readonly maxDiskUsagePercent?: number | undefined;
12
+ }
13
+ export interface ObservabilityPortConfig {
14
+ readonly collectorGrpc: number;
15
+ readonly collectorHttp: number;
16
+ readonly collectorHealth: number;
17
+ readonly metrics: number;
18
+ readonly logs: number;
19
+ readonly traces: number;
20
+ }
21
+ export interface ObservabilityZoneRuntimeConfig {
22
+ readonly zoneId: string;
23
+ readonly serviceName: string;
24
+ readonly traces: boolean;
25
+ readonly metrics: boolean;
26
+ readonly logs: boolean;
27
+ readonly sampleRate: number;
28
+ readonly flushIntervalMs: number;
29
+ readonly diagnosticsFlags: readonly string[];
30
+ }
31
+ interface ObservabilityEnabledRuntimeConfigBase {
32
+ readonly enabled: true;
33
+ readonly stackMode: 'external' | 'managed';
34
+ readonly runtimeDir: string;
35
+ readonly bindAddress: '127.0.0.1' | '::1';
36
+ readonly ports: ObservabilityPortConfig;
37
+ readonly prepareOnBuild: boolean;
38
+ readonly waitOnBuild: boolean;
39
+ readonly controllerStartPolicy: 'degraded' | 'require-ready' | 'off';
40
+ readonly startupCheckTimeoutMs: number;
41
+ readonly zones: readonly ObservabilityZoneRuntimeConfig[];
42
+ }
43
+ export interface ManagedObservabilityRuntimeConfig extends ObservabilityEnabledRuntimeConfigBase {
44
+ readonly stackMode: 'managed';
45
+ readonly projectName: string;
46
+ readonly dataDir: string;
47
+ readonly retention: {
48
+ readonly metrics: ObservabilityBaseRetentionPolicy;
49
+ readonly logs: ObservabilityByteBoundedRetentionPolicy;
50
+ readonly traces: ObservabilityDiskBoundedRetentionPolicy;
51
+ };
52
+ }
53
+ export interface ExternalObservabilityRuntimeConfig extends ObservabilityEnabledRuntimeConfigBase {
54
+ readonly stackMode: 'external';
55
+ }
56
+ export type EnabledObservabilityRuntimeConfig = ExternalObservabilityRuntimeConfig | ManagedObservabilityRuntimeConfig;
57
+ export type ObservabilityRuntimeConfig = {
58
+ readonly enabled: false;
59
+ } | EnabledObservabilityRuntimeConfig;
60
+ export declare function createObservabilityRuntimeConfig(config: LoadedSystemConfig): ObservabilityRuntimeConfig;
61
+ export {};
62
+ //# sourceMappingURL=observability-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-config.d.ts","sourceRoot":"","sources":["../../src/observability/observability-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,uCAAwC,SAAQ,gCAAgC;IAChG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,uCAAwC,SAAQ,gCAAgC;IAChG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,UAAU,qCAAqC;IAC9C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC;IACrE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,iCAAkC,SAAQ,qCAAqC;IAC/F,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,gCAAgC,CAAC;QACnD,QAAQ,CAAC,IAAI,EAAE,uCAAuC,CAAC;QACvD,QAAQ,CAAC,MAAM,EAAE,uCAAuC,CAAC;KACzD,CAAC;CACF;AAED,MAAM,WAAW,kCAAmC,SAAQ,qCAAqC;IAChG,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAC/B;AAED,MAAM,MAAM,iCAAiC,GAC1C,kCAAkC,GAClC,iCAAiC,CAAC;AAErC,MAAM,MAAM,0BAA0B,GACnC;IACA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;CACvB,GACD,iCAAiC,CAAC;AAwBrC,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,kBAAkB,GACxB,0BAA0B,CAwD5B"}
@@ -0,0 +1,60 @@
1
+ import path from 'node:path';
2
+ function isExternalHostObservabilityConfig(observability) {
3
+ return observability?.enabled === true && observability.stack.mode === 'external';
4
+ }
5
+ function isManagedHostObservabilityConfig(observability) {
6
+ return observability?.enabled === true && observability.stack.mode === 'managed';
7
+ }
8
+ export function createObservabilityRuntimeConfig(config) {
9
+ const hostObservability = config.host.observability;
10
+ if (hostObservability?.enabled !== true) {
11
+ return { enabled: false };
12
+ }
13
+ const zones = config.zones.flatMap((zone) => {
14
+ if (zone.observability?.enabled !== true) {
15
+ return [];
16
+ }
17
+ const { openclaw } = zone.observability;
18
+ return [
19
+ {
20
+ zoneId: zone.id,
21
+ serviceName: openclaw.serviceName,
22
+ traces: openclaw.traces,
23
+ metrics: openclaw.metrics,
24
+ logs: openclaw.logs,
25
+ sampleRate: openclaw.sampleRate,
26
+ flushIntervalMs: openclaw.flushIntervalMs,
27
+ diagnosticsFlags: openclaw.diagnosticsFlags,
28
+ },
29
+ ];
30
+ });
31
+ const baseConfig = {
32
+ enabled: true,
33
+ runtimeDir: path.join(config.runtimeDir, 'observability', config.host.projectNamespace),
34
+ bindAddress: hostObservability.bindAddress,
35
+ ports: hostObservability.ports,
36
+ prepareOnBuild: hostObservability.prepareOnBuild,
37
+ waitOnBuild: hostObservability.waitOnBuild,
38
+ controllerStartPolicy: hostObservability.controllerStartPolicy,
39
+ startupCheckTimeoutMs: hostObservability.startupCheckTimeoutMs,
40
+ zones,
41
+ };
42
+ if (isExternalHostObservabilityConfig(hostObservability)) {
43
+ return {
44
+ ...baseConfig,
45
+ stackMode: 'external',
46
+ };
47
+ }
48
+ if (!isManagedHostObservabilityConfig(hostObservability)) {
49
+ throw new Error('Managed host observability requires dataDir and retention.');
50
+ }
51
+ const projectName = hostObservability.projectName ?? `agent-vm-observability-${config.host.projectNamespace}`;
52
+ return {
53
+ ...baseConfig,
54
+ stackMode: 'managed',
55
+ projectName,
56
+ dataDir: hostObservability.dataDir,
57
+ retention: hostObservability.retention,
58
+ };
59
+ }
60
+ //# sourceMappingURL=observability-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-config.js","sourceRoot":"","sources":["../../src/observability/observability-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAsF7B,SAAS,iCAAiC,CACzC,aAAsC;IAEtC,OAAO,aAAa,EAAE,OAAO,KAAK,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnF,CAAC;AAED,SAAS,gCAAgC,CACxC,aAAsC;IAEtC,OAAO,aAAa,EAAE,OAAO,KAAK,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC/C,MAA0B;IAE1B,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IACpD,IAAI,iBAAiB,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAA6C,EAAE;QACtF,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,EAAE,CAAC;QACX,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,OAAO;YACN;gBACC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,eAAe,EAAE,QAAQ,CAAC,eAAe;gBACzC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;aAC3C;SACD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG;QAClB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACvF,WAAW,EAAE,iBAAiB,CAAC,WAAW;QAC1C,KAAK,EAAE,iBAAiB,CAAC,KAAK;QAC9B,cAAc,EAAE,iBAAiB,CAAC,cAAc;QAChD,WAAW,EAAE,iBAAiB,CAAC,WAAW;QAC1C,qBAAqB,EAAE,iBAAiB,CAAC,qBAAqB;QAC9D,qBAAqB,EAAE,iBAAiB,CAAC,qBAAqB;QAC9D,KAAK;KAC8D,CAAC;IAErE,IAAI,iCAAiC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1D,OAAO;YACN,GAAG,UAAU;YACb,SAAS,EAAE,UAAU;SACrB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,gCAAgC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,WAAW,GAChB,iBAAiB,CAAC,WAAW,IAAI,0BAA0B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC3F,OAAO;QACN,GAAG,UAAU;QACb,SAAS,EAAE,SAAS;QACpB,WAAW;QACX,OAAO,EAAE,iBAAiB,CAAC,OAAO;QAClC,SAAS,EAAE,iBAAiB,CAAC,SAAS;KACtC,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { LoadedSystemConfig } from '../config/system-config.js';
2
+ import { type ManagedObservabilityRuntimeConfig } from './observability-config.js';
3
+ import { checkObservabilityStackReadiness } from './observability-readiness.js';
4
+ export interface PrepareObservabilityStackOptions {
5
+ readonly config: ManagedObservabilityRuntimeConfig;
6
+ readonly checkReadiness?: typeof checkObservabilityStackReadiness;
7
+ readonly runCompose?: typeof runDockerCompose;
8
+ readonly wait: boolean;
9
+ }
10
+ export interface PrepareObservabilityStackResult {
11
+ readonly composePath: string;
12
+ readonly collectorConfigPath: string;
13
+ readonly status: 'started' | 'ready';
14
+ }
15
+ export declare function writeObservabilityArtifacts(config: ManagedObservabilityRuntimeConfig): Promise<{
16
+ readonly composePath: string;
17
+ readonly collectorConfigPath: string;
18
+ }>;
19
+ declare function runDockerCompose(options: {
20
+ readonly composePath: string;
21
+ readonly projectName: string;
22
+ readonly wait: boolean;
23
+ }): Promise<void>;
24
+ export declare function prepareObservabilityStack(options: PrepareObservabilityStackOptions): Promise<PrepareObservabilityStackResult>;
25
+ export declare function resolveBuildObservabilityConfig(systemConfig: LoadedSystemConfig): ManagedObservabilityRuntimeConfig | undefined;
26
+ export {};
27
+ //# sourceMappingURL=observability-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-lifecycle.d.ts","sourceRoot":"","sources":["../../src/observability/observability-lifecycle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,OAAO,EAEN,KAAK,iCAAiC,EACtC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAMhF,MAAM,WAAW,gCAAgC;IAChD,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,gCAAgC,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CACrC;AAgBD,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,iCAAiC,GACvC,OAAO,CAAC;IACV,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACrC,CAAC,CAkCD;AAED,iBAAS,gBAAgB,CAAC,OAAO,EAAE;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB;AAED,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,gCAAgC,GACvC,OAAO,CAAC,+BAA+B,CAAC,CAuB1C;AAED,wBAAgB,+BAA+B,CAC9C,YAAY,EAAE,kBAAkB,GAC9B,iCAAiC,GAAG,SAAS,CAY/C"}
@@ -0,0 +1,101 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { chmod, mkdir, writeFile } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { createObservabilityComposeModel, renderObservabilityComposeYaml, } from './observability-compose.js';
5
+ import { createObservabilityRuntimeConfig, } from './observability-config.js';
6
+ import { checkObservabilityStackReadiness } from './observability-readiness.js';
7
+ import { createOtelCollectorConfigModel, renderOtelCollectorConfigYaml, } from './otel-collector-config.js';
8
+ const OBSERVABILITY_DIRECTORY_MODE = 0o700;
9
+ const OBSERVABILITY_FILE_MODE = 0o600;
10
+ function formatUnknownError(error) {
11
+ return error instanceof Error ? error.message : String(error);
12
+ }
13
+ function createObservabilityComposeStartupError(error) {
14
+ return new Error(`Host observability Docker Compose startup failed. Ensure Docker Compose is installed and running, or rerun agent-vm build with --no-observability to skip this build run. Cause: ${formatUnknownError(error)}`, { cause: error });
15
+ }
16
+ export async function writeObservabilityArtifacts(config) {
17
+ const directoryPaths = [
18
+ config.runtimeDir,
19
+ config.dataDir,
20
+ path.join(config.dataDir, 'metrics'),
21
+ path.join(config.dataDir, 'logs'),
22
+ path.join(config.dataDir, 'traces'),
23
+ ];
24
+ await Promise.all(directoryPaths.map(async (directoryPath) => {
25
+ await mkdir(directoryPath, { mode: OBSERVABILITY_DIRECTORY_MODE, recursive: true });
26
+ await chmod(directoryPath, OBSERVABILITY_DIRECTORY_MODE);
27
+ }));
28
+ const composePath = path.join(config.runtimeDir, 'docker-compose.observability.yml');
29
+ const collectorConfigPath = path.join(config.runtimeDir, 'otel-collector-config.yaml');
30
+ await Promise.all([
31
+ writeFile(composePath, renderObservabilityComposeYaml(createObservabilityComposeModel(config)), { encoding: 'utf8', mode: OBSERVABILITY_FILE_MODE }),
32
+ writeFile(collectorConfigPath, renderOtelCollectorConfigYaml(createOtelCollectorConfigModel(config)), { encoding: 'utf8', mode: OBSERVABILITY_FILE_MODE }),
33
+ ]);
34
+ await Promise.all([
35
+ chmod(composePath, OBSERVABILITY_FILE_MODE),
36
+ chmod(collectorConfigPath, OBSERVABILITY_FILE_MODE),
37
+ ]);
38
+ return { composePath, collectorConfigPath };
39
+ }
40
+ function runDockerCompose(options) {
41
+ const args = [
42
+ 'compose',
43
+ '--project-name',
44
+ options.projectName,
45
+ '--file',
46
+ options.composePath,
47
+ 'up',
48
+ '-d',
49
+ ...(options.wait ? ['--wait'] : []),
50
+ ];
51
+ return new Promise((resolve, reject) => {
52
+ const childProcess = spawn('docker', args, { stdio: 'inherit' });
53
+ childProcess.once('error', reject);
54
+ childProcess.once('exit', (exitCode) => {
55
+ if (exitCode === 0) {
56
+ resolve();
57
+ return;
58
+ }
59
+ reject(new Error(`docker ${args.join(' ')} exited with code ${String(exitCode)}.`));
60
+ });
61
+ });
62
+ }
63
+ export async function prepareObservabilityStack(options) {
64
+ const artifacts = await writeObservabilityArtifacts(options.config);
65
+ try {
66
+ await (options.runCompose ?? runDockerCompose)({
67
+ composePath: artifacts.composePath,
68
+ projectName: options.config.projectName,
69
+ wait: options.wait,
70
+ });
71
+ }
72
+ catch (error) {
73
+ throw createObservabilityComposeStartupError(error);
74
+ }
75
+ if (options.wait) {
76
+ const readinessResult = await (options.checkReadiness ?? checkObservabilityStackReadiness)({
77
+ config: options.config,
78
+ });
79
+ if (!readinessResult.ok) {
80
+ throw new Error(`Host observability stack is not ready: ${readinessResult.reason}`);
81
+ }
82
+ }
83
+ return {
84
+ ...artifacts,
85
+ status: options.wait ? 'ready' : 'started',
86
+ };
87
+ }
88
+ export function resolveBuildObservabilityConfig(systemConfig) {
89
+ const observabilityConfig = createObservabilityRuntimeConfig(systemConfig);
90
+ if (!observabilityConfig.enabled) {
91
+ return undefined;
92
+ }
93
+ if (observabilityConfig.stackMode !== 'managed') {
94
+ return undefined;
95
+ }
96
+ if (!observabilityConfig.prepareOnBuild || observabilityConfig.zones.length === 0) {
97
+ return undefined;
98
+ }
99
+ return observabilityConfig;
100
+ }
101
+ //# sourceMappingURL=observability-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-lifecycle.js","sourceRoot":"","sources":["../../src/observability/observability-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EACN,+BAA+B,EAC/B,8BAA8B,GAC9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,gCAAgC,GAEhC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EACN,8BAA8B,EAC9B,6BAA6B,GAC7B,MAAM,4BAA4B,CAAC;AAepC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,sCAAsC,CAAC,KAAc;IAC7D,OAAO,IAAI,KAAK,CACf,oLAAoL,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAC/M,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAChD,MAAyC;IAKzC,MAAM,cAAc,GAAG;QACtB,MAAM,CAAC,UAAU;QACjB,MAAM,CAAC,OAAO;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;KACnC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAChB,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;QAC1C,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,KAAK,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;IAC1D,CAAC,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAC;IACrF,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IACvF,MAAM,OAAO,CAAC,GAAG,CAAC;QACjB,SAAS,CACR,WAAW,EACX,8BAA8B,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,EACvE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CACnD;QACD,SAAS,CACR,mBAAmB,EACnB,6BAA6B,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,EACrE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CACnD;KACD,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC;QACjB,KAAK,CAAC,WAAW,EAAE,uBAAuB,CAAC;QAC3C,KAAK,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;KACnD,CAAC,CAAC;IACH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAIzB;IACA,MAAM,IAAI,GAAG;QACZ,SAAS;QACT,gBAAgB;QAChB,OAAO,CAAC,WAAW;QACnB,QAAQ;QACR,OAAO,CAAC,WAAW;QACnB,IAAI;QACJ,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CAAC;IACF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YACD,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,OAAyC;IAEzC,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,CAAC;QACJ,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;YAC9C,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;YACvC,IAAI,EAAE,OAAO,CAAC,IAAI;SAClB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,sCAAsC,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,gCAAgC,CAAC,CAAC;YAC1F,MAAM,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;IACF,CAAC;IACD,OAAO;QACN,GAAG,SAAS;QACZ,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KAC1C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC9C,YAAgC;IAEhC,MAAM,mBAAmB,GAAG,gCAAgC,CAAC,YAAY,CAAC,CAAC;IAC3E,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,mBAAmB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,cAAc,IAAI,mBAAmB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { EnabledObservabilityRuntimeConfig } from './observability-config.js';
2
+ export type ObservabilityReadinessResult = {
3
+ readonly ok: true;
4
+ readonly status: 'ready';
5
+ } | {
6
+ readonly ok: false;
7
+ readonly reason: string;
8
+ readonly status: 'unavailable';
9
+ };
10
+ export interface CheckObservabilityStackReadinessOptions {
11
+ readonly config: EnabledObservabilityRuntimeConfig;
12
+ readonly fetchImpl?: typeof fetch;
13
+ readonly probeTimeoutMs?: number;
14
+ readonly retryDelayMs?: number;
15
+ }
16
+ export declare function checkObservabilityStackReadiness(options: CheckObservabilityStackReadinessOptions): Promise<ObservabilityReadinessResult>;
17
+ //# sourceMappingURL=observability-readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-readiness.d.ts","sourceRoot":"","sources":["../../src/observability/observability-readiness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,MAAM,4BAA4B,GACrC;IACA,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACxB,GACD;IACA,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEL,MAAM,WAAW,uCAAuC;IACvD,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AA0GD,wBAAsB,gCAAgC,CACrD,OAAO,EAAE,uCAAuC,GAC9C,OAAO,CAAC,4BAA4B,CAAC,CAoEvC"}
@@ -0,0 +1,141 @@
1
+ const DEFAULT_OBSERVABILITY_READINESS_PROBE_TIMEOUT_MS = 1_000;
2
+ function formatHttpHost(host) {
3
+ return host === '::1' ? '[::1]' : host;
4
+ }
5
+ function createHealthEndpoints(config) {
6
+ const host = formatHttpHost(config.bindAddress);
7
+ const collectorEndpoint = {
8
+ name: 'collector',
9
+ url: `http://${host}:${String(config.ports.collectorHealth)}/`,
10
+ };
11
+ if (config.stackMode === 'external') {
12
+ return [collectorEndpoint];
13
+ }
14
+ return [
15
+ collectorEndpoint,
16
+ {
17
+ name: 'victoria-metrics',
18
+ url: `http://${host}:${String(config.ports.metrics)}/health`,
19
+ },
20
+ {
21
+ name: 'victoria-logs',
22
+ url: `http://${host}:${String(config.ports.logs)}/health`,
23
+ },
24
+ {
25
+ name: 'victoria-traces',
26
+ url: `http://${host}:${String(config.ports.traces)}/health`,
27
+ },
28
+ ];
29
+ }
30
+ function readErrorCauseCode(error) {
31
+ const cause = error.cause;
32
+ if (typeof cause !== 'object' || cause === null || !('code' in cause)) {
33
+ return undefined;
34
+ }
35
+ const code = cause.code;
36
+ return typeof code === 'string' && code.length > 0 ? code : undefined;
37
+ }
38
+ function formatReadinessError(error) {
39
+ if (!(error instanceof Error)) {
40
+ return String(error);
41
+ }
42
+ const causeCode = readErrorCauseCode(error);
43
+ return causeCode === undefined ? error.message : `${error.message} (${causeCode})`;
44
+ }
45
+ function computeProbeTimeoutMs(options) {
46
+ return Math.max(1, Math.min(options.maxProbeTimeoutMs, options.deadlineMs - options.nowMs));
47
+ }
48
+ async function probeCollectorOtlpHttpReceiver(options) {
49
+ const host = formatHttpHost(options.config.bindAddress);
50
+ try {
51
+ const response = await options.fetchImpl(`http://${host}:${String(options.config.ports.collectorHttp)}/v1/logs`, {
52
+ body: '{"resourceLogs":[]}',
53
+ headers: { 'content-type': 'application/json' },
54
+ method: 'POST',
55
+ signal: AbortSignal.timeout(options.timeoutMs),
56
+ });
57
+ if (response.ok) {
58
+ return { ok: true };
59
+ }
60
+ return {
61
+ ok: false,
62
+ reason: `returned HTTP ${String(response.status)}`,
63
+ };
64
+ }
65
+ catch (error) {
66
+ return {
67
+ ok: false,
68
+ reason: formatReadinessError(error),
69
+ };
70
+ }
71
+ }
72
+ export async function checkObservabilityStackReadiness(options) {
73
+ const fetchImpl = options.fetchImpl ?? fetch;
74
+ const probeTimeoutMs = options.probeTimeoutMs ?? DEFAULT_OBSERVABILITY_READINESS_PROBE_TIMEOUT_MS;
75
+ const retryDelayMs = options.retryDelayMs ?? 100;
76
+ const healthEndpoints = createHealthEndpoints(options.config);
77
+ const deadlineMs = Date.now() + options.config.startupCheckTimeoutMs;
78
+ let lastErrorReason = 'observability health checks did not complete';
79
+ try {
80
+ for (;;) {
81
+ let ready = true;
82
+ for (const endpoint of healthEndpoints) {
83
+ const currentProbeTimeoutMs = computeProbeTimeoutMs({
84
+ deadlineMs,
85
+ maxProbeTimeoutMs: probeTimeoutMs,
86
+ nowMs: Date.now(),
87
+ });
88
+ try {
89
+ // oxlint-disable-next-line no-await-in-loop -- bounded readiness checks must preserve failure attribution
90
+ const response = await fetchImpl(endpoint.url, {
91
+ signal: AbortSignal.timeout(currentProbeTimeoutMs),
92
+ });
93
+ if (!response.ok) {
94
+ ready = false;
95
+ lastErrorReason = `${endpoint.name} health check returned HTTP ${String(response.status)}`;
96
+ break;
97
+ }
98
+ }
99
+ catch (error) {
100
+ ready = false;
101
+ lastErrorReason = `${endpoint.name} health check failed: ${formatReadinessError(error)}`;
102
+ if (endpoint.name === 'collector') {
103
+ // oxlint-disable-next-line no-await-in-loop -- collector fallback must preserve the failed health-check attribution before continuing.
104
+ const collectorOtlpProbeResult = await probeCollectorOtlpHttpReceiver({
105
+ config: options.config,
106
+ fetchImpl,
107
+ timeoutMs: computeProbeTimeoutMs({
108
+ deadlineMs,
109
+ maxProbeTimeoutMs: probeTimeoutMs,
110
+ nowMs: Date.now(),
111
+ }),
112
+ });
113
+ if (collectorOtlpProbeResult.ok) {
114
+ ready = true;
115
+ continue;
116
+ }
117
+ lastErrorReason = `${lastErrorReason}; OTLP HTTP fallback failed: ${collectorOtlpProbeResult.reason}`;
118
+ }
119
+ break;
120
+ }
121
+ }
122
+ if (ready) {
123
+ return { ok: true, status: 'ready' };
124
+ }
125
+ if (Date.now() >= deadlineMs) {
126
+ break;
127
+ }
128
+ // oxlint-disable-next-line no-await-in-loop -- bounded readiness polling for transient port binding races
129
+ await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
130
+ }
131
+ }
132
+ catch (error) {
133
+ lastErrorReason = error instanceof Error ? error.message : String(error);
134
+ }
135
+ return {
136
+ ok: false,
137
+ reason: lastErrorReason,
138
+ status: 'unavailable',
139
+ };
140
+ }
141
+ //# sourceMappingURL=observability-readiness.js.map