@agent-vm/agent-vm 0.0.96 → 0.0.97
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/cli/build-command.d.ts +3 -0
- package/dist/cli/build-command.d.ts.map +1 -1
- package/dist/cli/build-command.js +72 -0
- package/dist/cli/build-command.js.map +1 -1
- package/dist/cli/commands/build-definition.d.ts +2 -0
- package/dist/cli/commands/build-definition.d.ts.map +1 -1
- package/dist/cli/commands/build-definition.js +6 -1
- package/dist/cli/commands/build-definition.js.map +1 -1
- package/dist/cli/commands/controller-definition.d.ts +20 -20
- package/dist/cli/commands/create-app.d.ts +22 -20
- package/dist/cli/commands/create-app.d.ts.map +1 -1
- package/dist/cli/manual-templates.d.ts.map +1 -1
- package/dist/cli/manual-templates.js +32 -8
- package/dist/cli/manual-templates.js.map +1 -1
- package/dist/config/system-config.d.ts +98 -0
- package/dist/config/system-config.d.ts.map +1 -1
- package/dist/config/system-config.js +247 -1
- package/dist/config/system-config.js.map +1 -1
- package/dist/controller/controller-runtime-types.d.ts +2 -0
- package/dist/controller/controller-runtime-types.d.ts.map +1 -1
- package/dist/controller/controller-runtime.d.ts.map +1 -1
- package/dist/controller/controller-runtime.js +91 -22
- package/dist/controller/controller-runtime.js.map +1 -1
- package/dist/controller/zone-runtimes/openclaw-zone-runtime.d.ts +1 -0
- package/dist/controller/zone-runtimes/openclaw-zone-runtime.d.ts.map +1 -1
- package/dist/controller/zone-runtimes/openclaw-zone-runtime.js +4 -0
- package/dist/controller/zone-runtimes/openclaw-zone-runtime.js.map +1 -1
- package/dist/gateway/gateway-zone-orchestrator.d.ts +3 -1
- package/dist/gateway/gateway-zone-orchestrator.d.ts.map +1 -1
- package/dist/gateway/gateway-zone-orchestrator.js +70 -3
- package/dist/gateway/gateway-zone-orchestrator.js.map +1 -1
- package/dist/gateway/gateway-zone-support.d.ts +5 -1
- package/dist/gateway/gateway-zone-support.d.ts.map +1 -1
- package/dist/gateway/gateway-zone-support.js +35 -1
- package/dist/gateway/gateway-zone-support.js.map +1 -1
- package/dist/observability/observability-compose.d.ts +24 -0
- package/dist/observability/observability-compose.d.ts.map +1 -0
- package/dist/observability/observability-compose.js +144 -0
- package/dist/observability/observability-compose.js.map +1 -0
- package/dist/observability/observability-config.d.ts +62 -0
- package/dist/observability/observability-config.d.ts.map +1 -0
- package/dist/observability/observability-config.js +60 -0
- package/dist/observability/observability-config.js.map +1 -0
- package/dist/observability/observability-lifecycle.d.ts +27 -0
- package/dist/observability/observability-lifecycle.d.ts.map +1 -0
- package/dist/observability/observability-lifecycle.js +101 -0
- package/dist/observability/observability-lifecycle.js.map +1 -0
- package/dist/observability/observability-readiness.d.ts +17 -0
- package/dist/observability/observability-readiness.d.ts.map +1 -0
- package/dist/observability/observability-readiness.js +141 -0
- package/dist/observability/observability-readiness.js.map +1 -0
- package/dist/observability/otel-collector-config.d.ts +70 -0
- package/dist/observability/otel-collector-config.d.ts.map +1 -0
- package/dist/observability/otel-collector-config.js +179 -0
- package/dist/observability/otel-collector-config.js.map +1 -0
- package/dist/operations/doctor.d.ts.map +1 -1
- package/dist/operations/doctor.js +20 -1
- package/dist/operations/doctor.js.map +1 -1
- package/package.json +11 -11
|
@@ -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":"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"}
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability-readiness.js","sourceRoot":"","sources":["../../src/observability/observability-readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ManagedObservabilityRuntimeConfig } from './observability-config.js';
|
|
2
|
+
export interface OtelCollectorConfigModel {
|
|
3
|
+
readonly receivers: {
|
|
4
|
+
readonly otlp: {
|
|
5
|
+
readonly protocols: {
|
|
6
|
+
readonly grpc: {
|
|
7
|
+
readonly endpoint: string;
|
|
8
|
+
};
|
|
9
|
+
readonly http: {
|
|
10
|
+
readonly endpoint: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
readonly processors: {
|
|
16
|
+
readonly 'resource/drop-sensitive-fields': {
|
|
17
|
+
readonly attributes: readonly OtelCollectorAttributeAction[];
|
|
18
|
+
};
|
|
19
|
+
readonly 'attributes/drop-sensitive-fields': {
|
|
20
|
+
readonly actions: readonly OtelCollectorAttributeAction[];
|
|
21
|
+
};
|
|
22
|
+
readonly 'transform/drop-log-body': {
|
|
23
|
+
readonly log_statements: readonly {
|
|
24
|
+
readonly context: 'log';
|
|
25
|
+
readonly statements: readonly string[];
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
readonly exporters: {
|
|
30
|
+
readonly otlphttp: {
|
|
31
|
+
readonly encoding: 'proto';
|
|
32
|
+
readonly compression: 'gzip';
|
|
33
|
+
readonly metrics: {
|
|
34
|
+
readonly metricsEndpoint: string;
|
|
35
|
+
};
|
|
36
|
+
readonly logs: {
|
|
37
|
+
readonly logsEndpoint: string;
|
|
38
|
+
readonly headers: Record<string, string>;
|
|
39
|
+
};
|
|
40
|
+
readonly traces: {
|
|
41
|
+
readonly tracesEndpoint: string;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
readonly extensions: {
|
|
46
|
+
readonly health_check: {
|
|
47
|
+
readonly endpoint: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
readonly service: {
|
|
51
|
+
readonly extensions: readonly string[];
|
|
52
|
+
readonly pipelines: {
|
|
53
|
+
readonly metrics: OtelCollectorPipeline;
|
|
54
|
+
readonly logs: OtelCollectorPipeline;
|
|
55
|
+
readonly traces: OtelCollectorPipeline;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface OtelCollectorAttributeAction {
|
|
60
|
+
readonly action: 'delete';
|
|
61
|
+
readonly key: string;
|
|
62
|
+
}
|
|
63
|
+
export interface OtelCollectorPipeline {
|
|
64
|
+
readonly receivers: readonly string[];
|
|
65
|
+
readonly processors: readonly string[];
|
|
66
|
+
readonly exporters: readonly string[];
|
|
67
|
+
}
|
|
68
|
+
export declare function createOtelCollectorConfigModel(_config: ManagedObservabilityRuntimeConfig): OtelCollectorConfigModel;
|
|
69
|
+
export declare function renderOtelCollectorConfigYaml(config: OtelCollectorConfigModel): string;
|
|
70
|
+
//# sourceMappingURL=otel-collector-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-collector-config.d.ts","sourceRoot":"","sources":["../../src/observability/otel-collector-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAqCnF,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE;YACd,QAAQ,CAAC,SAAS,EAAE;gBACnB,QAAQ,CAAC,IAAI,EAAE;oBAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAC7C,QAAQ,CAAC,IAAI,EAAE;oBAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;iBAAE,CAAC;aAC7C,CAAC;SACF,CAAC;KACF,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QACpB,QAAQ,CAAC,gCAAgC,EAAE;YAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,4BAA4B,EAAE,CAAC;SAC7D,CAAC;QACF,QAAQ,CAAC,kCAAkC,EAAE;YAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,4BAA4B,EAAE,CAAC;SAC1D,CAAC;QACF,QAAQ,CAAC,yBAAyB,EAAE;YACnC,QAAQ,CAAC,cAAc,EAAE,SAAS;gBACjC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;aACvC,EAAE,CAAC;SACJ,CAAC;KACF,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE;YAClB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7B,QAAQ,CAAC,OAAO,EAAE;gBAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;aAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,EAAE;gBACd,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACzC,CAAC;YACF,QAAQ,CAAC,MAAM,EAAE;gBAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;aAAE,CAAC;SACrD,CAAC;KACF,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE;QACpB,QAAQ,CAAC,YAAY,EAAE;YAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KACrD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QACjB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE;YACnB,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;YACxC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACrC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;SACvC,CAAC;KACF,CAAC;CACF;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,iCAAiC,GACxC,wBAAwB,CA4E1B;AA4BD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAsDtF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
const SENSITIVE_FIELD_NAMES = [
|
|
2
|
+
'Authorization',
|
|
3
|
+
'Cookie',
|
|
4
|
+
'Set-Cookie',
|
|
5
|
+
'X-Api-Key',
|
|
6
|
+
'access_token',
|
|
7
|
+
'api_key',
|
|
8
|
+
'apikey',
|
|
9
|
+
'authorization',
|
|
10
|
+
'body',
|
|
11
|
+
'client_secret',
|
|
12
|
+
'cookie',
|
|
13
|
+
'db.statement',
|
|
14
|
+
'http.request.body',
|
|
15
|
+
'http.request.header.authorization',
|
|
16
|
+
'http.response.body',
|
|
17
|
+
'http.response.header.set_cookie',
|
|
18
|
+
'id_token',
|
|
19
|
+
'message',
|
|
20
|
+
'payload',
|
|
21
|
+
'password',
|
|
22
|
+
'private_key',
|
|
23
|
+
'refresh_token',
|
|
24
|
+
'secret',
|
|
25
|
+
'set-cookie',
|
|
26
|
+
'token',
|
|
27
|
+
'url.full',
|
|
28
|
+
'url.query',
|
|
29
|
+
'x-api-key',
|
|
30
|
+
];
|
|
31
|
+
const OTEL_COLLECTOR_GRPC_CONTAINER_PORT = 4317;
|
|
32
|
+
const OTEL_COLLECTOR_HTTP_CONTAINER_PORT = 4318;
|
|
33
|
+
const OTEL_COLLECTOR_HEALTH_CONTAINER_PORT = 13_133;
|
|
34
|
+
export function createOtelCollectorConfigModel(_config) {
|
|
35
|
+
const sensitiveFieldHeader = SENSITIVE_FIELD_NAMES.join(',');
|
|
36
|
+
return {
|
|
37
|
+
receivers: {
|
|
38
|
+
otlp: {
|
|
39
|
+
protocols: {
|
|
40
|
+
grpc: { endpoint: `0.0.0.0:${String(OTEL_COLLECTOR_GRPC_CONTAINER_PORT)}` },
|
|
41
|
+
http: { endpoint: `0.0.0.0:${String(OTEL_COLLECTOR_HTTP_CONTAINER_PORT)}` },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
processors: {
|
|
46
|
+
'resource/drop-sensitive-fields': {
|
|
47
|
+
attributes: SENSITIVE_FIELD_NAMES.map((fieldName) => ({
|
|
48
|
+
action: 'delete',
|
|
49
|
+
key: fieldName,
|
|
50
|
+
})),
|
|
51
|
+
},
|
|
52
|
+
'attributes/drop-sensitive-fields': {
|
|
53
|
+
actions: SENSITIVE_FIELD_NAMES.map((fieldName) => ({
|
|
54
|
+
action: 'delete',
|
|
55
|
+
key: fieldName,
|
|
56
|
+
})),
|
|
57
|
+
},
|
|
58
|
+
'transform/drop-log-body': {
|
|
59
|
+
log_statements: [
|
|
60
|
+
{
|
|
61
|
+
context: 'log',
|
|
62
|
+
statements: ['set(body, "")'],
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
exporters: {
|
|
68
|
+
otlphttp: {
|
|
69
|
+
encoding: 'proto',
|
|
70
|
+
compression: 'gzip',
|
|
71
|
+
metrics: { metricsEndpoint: 'http://victoria-metrics:8428/opentelemetry/v1/metrics' },
|
|
72
|
+
logs: {
|
|
73
|
+
logsEndpoint: 'http://victoria-logs:9428/insert/opentelemetry/v1/logs',
|
|
74
|
+
headers: { 'VL-Ignore-Fields': sensitiveFieldHeader },
|
|
75
|
+
},
|
|
76
|
+
traces: { tracesEndpoint: 'http://victoria-traces:10428/insert/opentelemetry/v1/traces' },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
extensions: {
|
|
80
|
+
health_check: {
|
|
81
|
+
endpoint: `0.0.0.0:${String(OTEL_COLLECTOR_HEALTH_CONTAINER_PORT)}`,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
service: {
|
|
85
|
+
extensions: ['health_check'],
|
|
86
|
+
pipelines: {
|
|
87
|
+
metrics: {
|
|
88
|
+
receivers: ['otlp'],
|
|
89
|
+
processors: ['resource/drop-sensitive-fields', 'attributes/drop-sensitive-fields'],
|
|
90
|
+
exporters: ['otlphttp/metrics'],
|
|
91
|
+
},
|
|
92
|
+
logs: {
|
|
93
|
+
receivers: ['otlp'],
|
|
94
|
+
processors: [
|
|
95
|
+
'resource/drop-sensitive-fields',
|
|
96
|
+
'attributes/drop-sensitive-fields',
|
|
97
|
+
'transform/drop-log-body',
|
|
98
|
+
],
|
|
99
|
+
exporters: ['otlphttp/logs'],
|
|
100
|
+
},
|
|
101
|
+
traces: {
|
|
102
|
+
receivers: ['otlp'],
|
|
103
|
+
processors: ['resource/drop-sensitive-fields', 'attributes/drop-sensitive-fields'],
|
|
104
|
+
exporters: ['otlphttp/traces'],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function renderStringArray(indent, values) {
|
|
111
|
+
return values.map((value) => `${indent}- ${value}`);
|
|
112
|
+
}
|
|
113
|
+
function renderAttributeActions(indent, actions) {
|
|
114
|
+
return actions.flatMap((action) => [
|
|
115
|
+
`${indent}- key: ${action.key}`,
|
|
116
|
+
`${indent} action: ${action.action}`,
|
|
117
|
+
]);
|
|
118
|
+
}
|
|
119
|
+
function renderPipeline(name, pipeline) {
|
|
120
|
+
return [
|
|
121
|
+
` ${name}:`,
|
|
122
|
+
' receivers:',
|
|
123
|
+
...renderStringArray(' ', pipeline.receivers),
|
|
124
|
+
' processors:',
|
|
125
|
+
...renderStringArray(' ', pipeline.processors),
|
|
126
|
+
' exporters:',
|
|
127
|
+
...renderStringArray(' ', pipeline.exporters),
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
export function renderOtelCollectorConfigYaml(config) {
|
|
131
|
+
const lines = [
|
|
132
|
+
'receivers:',
|
|
133
|
+
' otlp:',
|
|
134
|
+
' protocols:',
|
|
135
|
+
` grpc: { endpoint: "${config.receivers.otlp.protocols.grpc.endpoint}" }`,
|
|
136
|
+
` http: { endpoint: "${config.receivers.otlp.protocols.http.endpoint}" }`,
|
|
137
|
+
'processors:',
|
|
138
|
+
' resource/drop-sensitive-fields:',
|
|
139
|
+
' attributes:',
|
|
140
|
+
...renderAttributeActions(' ', config.processors['resource/drop-sensitive-fields'].attributes),
|
|
141
|
+
' attributes/drop-sensitive-fields:',
|
|
142
|
+
' actions:',
|
|
143
|
+
...renderAttributeActions(' ', config.processors['attributes/drop-sensitive-fields'].actions),
|
|
144
|
+
' transform/drop-log-body:',
|
|
145
|
+
' log_statements:',
|
|
146
|
+
...config.processors['transform/drop-log-body'].log_statements.flatMap((statementGroup) => [
|
|
147
|
+
` - context: ${statementGroup.context}`,
|
|
148
|
+
' statements:',
|
|
149
|
+
...statementGroup.statements.map((statement) => ` - ${JSON.stringify(statement)}`),
|
|
150
|
+
]),
|
|
151
|
+
'exporters:',
|
|
152
|
+
' otlphttp/metrics:',
|
|
153
|
+
` encoding: ${config.exporters.otlphttp.encoding}`,
|
|
154
|
+
` compression: ${config.exporters.otlphttp.compression}`,
|
|
155
|
+
` metrics_endpoint: ${config.exporters.otlphttp.metrics.metricsEndpoint}`,
|
|
156
|
+
' otlphttp/logs:',
|
|
157
|
+
` encoding: ${config.exporters.otlphttp.encoding}`,
|
|
158
|
+
` compression: ${config.exporters.otlphttp.compression}`,
|
|
159
|
+
` logs_endpoint: ${config.exporters.otlphttp.logs.logsEndpoint}`,
|
|
160
|
+
' headers:',
|
|
161
|
+
` VL-Ignore-Fields: ${config.exporters.otlphttp.logs.headers['VL-Ignore-Fields']}`,
|
|
162
|
+
' otlphttp/traces:',
|
|
163
|
+
` encoding: ${config.exporters.otlphttp.encoding}`,
|
|
164
|
+
` compression: ${config.exporters.otlphttp.compression}`,
|
|
165
|
+
` traces_endpoint: ${config.exporters.otlphttp.traces.tracesEndpoint}`,
|
|
166
|
+
'extensions:',
|
|
167
|
+
' health_check:',
|
|
168
|
+
` endpoint: ${config.extensions.health_check.endpoint}`,
|
|
169
|
+
'service:',
|
|
170
|
+
' extensions:',
|
|
171
|
+
...renderStringArray(' ', config.service.extensions),
|
|
172
|
+
' pipelines:',
|
|
173
|
+
...renderPipeline('metrics', config.service.pipelines.metrics),
|
|
174
|
+
...renderPipeline('logs', config.service.pipelines.logs),
|
|
175
|
+
...renderPipeline('traces', config.service.pipelines.traces),
|
|
176
|
+
];
|
|
177
|
+
return `${lines.join('\n')}\n`;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=otel-collector-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-collector-config.js","sourceRoot":"","sources":["../../src/observability/otel-collector-config.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG;IAC7B,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,cAAc;IACd,SAAS;IACT,QAAQ;IACR,eAAe;IACf,MAAM;IACN,eAAe;IACf,QAAQ;IACR,cAAc;IACd,mBAAmB;IACnB,mCAAmC;IACnC,oBAAoB;IACpB,iCAAiC;IACjC,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,aAAa;IACb,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,UAAU;IACV,WAAW;IACX,WAAW;CACF,CAAC;AAEX,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAChD,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAChD,MAAM,oCAAoC,GAAG,MAAM,CAAC;AA6DpD,MAAM,UAAU,8BAA8B,CAC7C,OAA0C;IAE1C,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7D,OAAO;QACN,SAAS,EAAE;YACV,IAAI,EAAE;gBACL,SAAS,EAAE;oBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,MAAM,CAAC,kCAAkC,CAAC,EAAE,EAAE;oBAC3E,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,MAAM,CAAC,kCAAkC,CAAC,EAAE,EAAE;iBAC3E;aACD;SACD;QACD,UAAU,EAAE;YACX,gCAAgC,EAAE;gBACjC,UAAU,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;oBACrD,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,SAAS;iBACd,CAAC,CAAC;aACH;YACD,kCAAkC,EAAE;gBACnC,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;oBAClD,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,SAAS;iBACd,CAAC,CAAC;aACH;YACD,yBAAyB,EAAE;gBAC1B,cAAc,EAAE;oBACf;wBACC,OAAO,EAAE,KAAK;wBACd,UAAU,EAAE,CAAC,eAAe,CAAC;qBAC7B;iBACD;aACD;SACD;QACD,SAAS,EAAE;YACV,QAAQ,EAAE;gBACT,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,EAAE,eAAe,EAAE,uDAAuD,EAAE;gBACrF,IAAI,EAAE;oBACL,YAAY,EAAE,wDAAwD;oBACtE,OAAO,EAAE,EAAE,kBAAkB,EAAE,oBAAoB,EAAE;iBACrD;gBACD,MAAM,EAAE,EAAE,cAAc,EAAE,6DAA6D,EAAE;aACzF;SACD;QACD,UAAU,EAAE;YACX,YAAY,EAAE;gBACb,QAAQ,EAAE,WAAW,MAAM,CAAC,oCAAoC,CAAC,EAAE;aACnE;SACD;QACD,OAAO,EAAE;YACR,UAAU,EAAE,CAAC,cAAc,CAAC;YAC5B,SAAS,EAAE;gBACV,OAAO,EAAE;oBACR,SAAS,EAAE,CAAC,MAAM,CAAC;oBACnB,UAAU,EAAE,CAAC,gCAAgC,EAAE,kCAAkC,CAAC;oBAClF,SAAS,EAAE,CAAC,kBAAkB,CAAC;iBAC/B;gBACD,IAAI,EAAE;oBACL,SAAS,EAAE,CAAC,MAAM,CAAC;oBACnB,UAAU,EAAE;wBACX,gCAAgC;wBAChC,kCAAkC;wBAClC,yBAAyB;qBACzB;oBACD,SAAS,EAAE,CAAC,eAAe,CAAC;iBAC5B;gBACD,MAAM,EAAE;oBACP,SAAS,EAAE,CAAC,MAAM,CAAC;oBACnB,UAAU,EAAE,CAAC,gCAAgC,EAAE,kCAAkC,CAAC;oBAClF,SAAS,EAAE,CAAC,iBAAiB,CAAC;iBAC9B;aACD;SACD;KACD,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAyB;IACnE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,sBAAsB,CAC9B,MAAc,EACd,OAAgD;IAEhD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,GAAG,MAAM,UAAU,MAAM,CAAC,GAAG,EAAE;QAC/B,GAAG,MAAM,aAAa,MAAM,CAAC,MAAM,EAAE;KACrC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,QAA+B;IACpE,OAAO;QACN,OAAO,IAAI,GAAG;QACd,kBAAkB;QAClB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;QACpD,mBAAmB;QACnB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;QACrD,kBAAkB;QAClB,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;KACpD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAgC;IAC7E,MAAM,KAAK,GAAG;QACb,YAAY;QACZ,SAAS;QACT,gBAAgB;QAChB,4BAA4B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK;QAC9E,4BAA4B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK;QAC9E,aAAa;QACb,mCAAmC;QACnC,iBAAiB;QACjB,GAAG,sBAAsB,CACxB,QAAQ,EACR,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,UAAU,CAC9D;QACD,qCAAqC;QACrC,cAAc;QACd,GAAG,sBAAsB,CACxB,QAAQ,EACR,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAC7D;QACD,4BAA4B;QAC5B,qBAAqB;QACrB,GAAG,MAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1F,oBAAoB,cAAc,CAAC,OAAO,EAAE;YAC5C,qBAAqB;YACrB,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;SAC3F,CAAC;QACF,YAAY;QACZ,qBAAqB;QACrB,iBAAiB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACrD,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC3D,yBAAyB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;QAC5E,kBAAkB;QAClB,iBAAiB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACrD,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC3D,sBAAsB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE;QACnE,cAAc;QACd,2BAA2B,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;QACvF,oBAAoB;QACpB,iBAAiB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACrD,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC3D,wBAAwB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE;QACzE,aAAa;QACb,iBAAiB;QACjB,iBAAiB,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1D,UAAU;QACV,eAAe;QACf,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACvD,cAAc;QACd,GAAG,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;QAC9D,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACxD,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;KAC5D,CAAC;IACF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/operations/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,yBAAyB,EACzB,aAAa,EAEb,MAAM,6BAA6B,CAAC;AAIrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGnF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CACrC,OAAO,EAAE,yBAAyB,KAC9B,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/operations/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,yBAAyB,EACzB,aAAa,EAEb,MAAM,6BAA6B,CAAC;AAIrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGnF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CACrC,OAAO,EAAE,yBAAyB,KAC9B,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;CAC/B;AAiJD,wBAAgB,+BAA+B,CAC9C,YAAY,EAAE,YAAY,GACxB,SAAS,WAAW,EAAE,CAqCxB;AAED,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,YAAY,GAAG,WAAW,CAQtF;AAsJD,wBAAsB,8BAA8B,CACnD,YAAY,EAAE,kBAAkB,GAC9B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA0E7B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,sBAAsB,CA8K/F"}
|
|
@@ -43,7 +43,10 @@ function buildZigVersionCheck(zigVersion, requiredZigVersion) {
|
|
|
43
43
|
function hasDockerBackedImageProfiles(systemConfig) {
|
|
44
44
|
const gatewayProfiles = Object.values(systemConfig.imageProfiles.gateways);
|
|
45
45
|
const toolVmProfiles = Object.values(systemConfig.imageProfiles.toolVms);
|
|
46
|
-
|
|
46
|
+
const hasDockerBackedImageProfile = [...gatewayProfiles, ...toolVmProfiles].some((profile) => profile.dockerfile !== undefined || profile.source !== undefined);
|
|
47
|
+
const hasManagedObservabilityStack = systemConfig.host.observability?.enabled === true &&
|
|
48
|
+
systemConfig.host.observability.stack.mode === 'managed';
|
|
49
|
+
return hasDockerBackedImageProfile || hasManagedObservabilityStack;
|
|
47
50
|
}
|
|
48
51
|
function buildDockerChecks(systemConfig, availableBinaries, dockerDaemonReady) {
|
|
49
52
|
if (!hasDockerBackedImageProfiles(systemConfig)) {
|
|
@@ -91,6 +94,21 @@ function buildOpenClawCliCheck(systemConfig, availableBinaries) {
|
|
|
91
94
|
},
|
|
92
95
|
];
|
|
93
96
|
}
|
|
97
|
+
function buildObservabilityEnabledCheck(systemConfig) {
|
|
98
|
+
const observability = systemConfig.host.observability;
|
|
99
|
+
if (observability?.enabled === true) {
|
|
100
|
+
return {
|
|
101
|
+
name: 'observability-enabled',
|
|
102
|
+
ok: true,
|
|
103
|
+
hint: observability.stack.mode,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
name: 'observability-enabled',
|
|
108
|
+
ok: true,
|
|
109
|
+
hint: 'Recommended: enable host.observability with stack.mode managed for a local Victoria stack, or stack.mode external plus stack.scrubbing.responsibility external-collector for a shared collector.',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
94
112
|
function isSameOrDescendantPath(childPath, parentPath) {
|
|
95
113
|
const relativePath = path.relative(path.resolve(parentPath), path.resolve(childPath));
|
|
96
114
|
return relativePath === '' || (!relativePath.startsWith('..') && !path.isAbsolute(relativePath));
|
|
@@ -386,6 +404,7 @@ export function runControllerDoctor(options) {
|
|
|
386
404
|
},
|
|
387
405
|
]
|
|
388
406
|
: []),
|
|
407
|
+
buildObservabilityEnabledCheck(options.systemConfig),
|
|
389
408
|
checkAnyBinary('qemu', ['qemu-system-aarch64', 'qemu-system-x86_64'], 'Install QEMU (for example: brew install qemu).', availableBinaries),
|
|
390
409
|
checkAnyBinary('qemu-img', ['qemu-img'], 'Install qemu-img (for example: brew install qemu).', availableBinaries),
|
|
391
410
|
checkAnyBinary('mke2fs', [
|