@google/gemini-cli-core 0.7.0-nightly.20250912.68035591 → 0.7.0-preview.0
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/index.d.ts +5 -4
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +1 -0
- package/dist/src/code_assist/converter.js +1 -0
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +10 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.d.ts +5 -7
- package/dist/src/code_assist/oauth-credential-storage.js +5 -8
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +35 -33
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +28 -2
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +674 -536
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/config/config.d.ts +19 -0
- package/dist/src/config/config.js +48 -6
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +93 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -0
- package/dist/src/config/models.js +1 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +1 -0
- package/dist/src/core/baseLlmClient.js +24 -0
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +63 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +3 -4
- package/dist/src/core/client.js +62 -145
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +119 -202
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +9 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +16 -11
- package/dist/src/core/geminiChat.js +124 -150
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +342 -204
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +5 -5
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/constants.d.ts +1 -0
- package/dist/src/ide/constants.js +1 -0
- package/dist/src/ide/constants.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +44 -14
- package/dist/src/ide/detect-ide.js +29 -69
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +29 -46
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +28 -17
- package/dist/src/ide/ide-client.js +125 -57
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +44 -10
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +2 -2
- package/dist/src/ide/ide-installer.js +15 -11
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +30 -12
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +0 -93
- package/dist/src/ide/ideContext.js +0 -45
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/types.d.ts +141 -0
- package/dist/src/ide/types.js +73 -0
- package/dist/src/ide/types.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +4 -1
- package/dist/src/mcp/oauth-provider.js +32 -26
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +2 -0
- package/dist/src/mcp/oauth-token-storage.js +25 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +251 -160
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/index.d.ts +11 -0
- package/dist/src/mcp/token-storage/index.js +12 -0
- package/dist/src/mcp/token-storage/index.js.map +1 -0
- package/dist/src/policy/policy-engine.js +11 -2
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +45 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +37 -3
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +37 -11
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/classifierStrategy.js +173 -0
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js +192 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.js +4 -3
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +13 -12
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +3 -2
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +2 -1
- package/dist/src/services/chatRecordingService.js +3 -3
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +8 -3
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/gitService.js +9 -12
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +10 -20
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +23 -18
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +27 -13
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +30 -15
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +43 -11
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
- package/dist/src/telemetry/activity-detector.test.js +136 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +14 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +109 -3
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +63 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +12 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +27 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +76 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/config.test.d.ts +6 -0
- package/dist/src/telemetry/config.test.js +124 -0
- package/dist/src/telemetry/config.test.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +9 -0
- package/dist/src/telemetry/constants.js +9 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
- package/dist/src/telemetry/gcp-exporters.js +117 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
- package/dist/src/telemetry/gcp-exporters.test.js +318 -0
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +5 -1
- package/dist/src/telemetry/index.js +5 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +8 -1
- package/dist/src/telemetry/loggers.js +111 -2
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +207 -4
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +3 -0
- package/dist/src/telemetry/metrics.js +43 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +42 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +20 -2
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +108 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +50 -3
- package/dist/src/telemetry/types.js +91 -6
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -1
- package/dist/src/telemetry/uiTelemetry.js +2 -3
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +11 -11
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/edit.js +4 -2
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +77 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
- package/dist/src/tools/message-bus-integration.test.js +183 -0
- package/dist/src/tools/message-bus-integration.test.js.map +1 -0
- package/dist/src/tools/shell.js +8 -11
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +33 -37
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +0 -1
- package/dist/src/tools/smart-edit.js +3 -15
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +16 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-registry.js +1 -0
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +13 -4
- package/dist/src/tools/tools.js +101 -3
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +2 -2
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +16 -10
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +25 -0
- package/dist/src/tools/write-todos.js +150 -0
- package/dist/src/tools/write-todos.js.map +1 -0
- package/dist/src/tools/write-todos.test.d.ts +6 -0
- package/dist/src/tools/write-todos.test.js +89 -0
- package/dist/src/tools/write-todos.test.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +7 -6
- package/dist/src/utils/editCorrector.js +61 -18
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +30 -79
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.js +31 -44
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +61 -75
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/errorParsing.js +2 -2
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +7 -7
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +17 -8
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +12 -6
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.d.ts +2 -2
- package/dist/src/utils/nextSpeakerChecker.js +8 -2
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +40 -33
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +5 -0
- package/dist/src/utils/shell-utils.js +23 -0
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/textUtils.d.ts +5 -0
- package/dist/src/utils/textUtils.js +14 -0
- package/dist/src/utils/textUtils.js.map +1 -1
- package/dist/src/utils/textUtils.test.d.ts +6 -0
- package/dist/src/utils/textUtils.test.js +59 -0
- package/dist/src/utils/textUtils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/dist/google-gemini-cli-core-0.6.0-nightly.tgz +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { FatalConfigError } from '../utils/errors.js';
|
|
7
|
+
import { TelemetryTarget } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Parse a boolean environment flag. Accepts 'true'/'1' as true.
|
|
10
|
+
*/
|
|
11
|
+
export function parseBooleanEnvFlag(value) {
|
|
12
|
+
if (value === undefined)
|
|
13
|
+
return undefined;
|
|
14
|
+
return value === 'true' || value === '1';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Normalize a telemetry target value into TelemetryTarget or undefined.
|
|
18
|
+
*/
|
|
19
|
+
export function parseTelemetryTargetValue(value) {
|
|
20
|
+
if (value === undefined)
|
|
21
|
+
return undefined;
|
|
22
|
+
if (value === TelemetryTarget.LOCAL || value === 'local') {
|
|
23
|
+
return TelemetryTarget.LOCAL;
|
|
24
|
+
}
|
|
25
|
+
if (value === TelemetryTarget.GCP || value === 'gcp') {
|
|
26
|
+
return TelemetryTarget.GCP;
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build TelemetrySettings by resolving from argv (highest), env, then settings.
|
|
32
|
+
*/
|
|
33
|
+
export async function resolveTelemetrySettings(options) {
|
|
34
|
+
const argv = options.argv ?? {};
|
|
35
|
+
const env = options.env ?? {};
|
|
36
|
+
const settings = options.settings ?? {};
|
|
37
|
+
const enabled = argv.telemetry ??
|
|
38
|
+
parseBooleanEnvFlag(env['GEMINI_TELEMETRY_ENABLED']) ??
|
|
39
|
+
settings.enabled;
|
|
40
|
+
const rawTarget = argv.telemetryTarget ??
|
|
41
|
+
env['GEMINI_TELEMETRY_TARGET'] ??
|
|
42
|
+
settings.target;
|
|
43
|
+
const target = parseTelemetryTargetValue(rawTarget);
|
|
44
|
+
if (rawTarget !== undefined && target === undefined) {
|
|
45
|
+
throw new FatalConfigError(`Invalid telemetry target: ${String(rawTarget)}. Valid values are: local, gcp`);
|
|
46
|
+
}
|
|
47
|
+
const otlpEndpoint = argv.telemetryOtlpEndpoint ??
|
|
48
|
+
env['GEMINI_TELEMETRY_OTLP_ENDPOINT'] ??
|
|
49
|
+
env['OTEL_EXPORTER_OTLP_ENDPOINT'] ??
|
|
50
|
+
settings.otlpEndpoint;
|
|
51
|
+
const rawProtocol = argv.telemetryOtlpProtocol ??
|
|
52
|
+
env['GEMINI_TELEMETRY_OTLP_PROTOCOL'] ??
|
|
53
|
+
settings.otlpProtocol;
|
|
54
|
+
const otlpProtocol = ['grpc', 'http'].find((p) => p === rawProtocol);
|
|
55
|
+
if (rawProtocol !== undefined && otlpProtocol === undefined) {
|
|
56
|
+
throw new FatalConfigError(`Invalid telemetry OTLP protocol: ${String(rawProtocol)}. Valid values are: grpc, http`);
|
|
57
|
+
}
|
|
58
|
+
const logPrompts = argv.telemetryLogPrompts ??
|
|
59
|
+
parseBooleanEnvFlag(env['GEMINI_TELEMETRY_LOG_PROMPTS']) ??
|
|
60
|
+
settings.logPrompts;
|
|
61
|
+
const outfile = argv.telemetryOutfile ??
|
|
62
|
+
env['GEMINI_TELEMETRY_OUTFILE'] ??
|
|
63
|
+
settings.outfile;
|
|
64
|
+
const useCollector = parseBooleanEnvFlag(env['GEMINI_TELEMETRY_USE_COLLECTOR']) ??
|
|
65
|
+
settings.useCollector;
|
|
66
|
+
return {
|
|
67
|
+
enabled,
|
|
68
|
+
target,
|
|
69
|
+
otlpEndpoint,
|
|
70
|
+
otlpProtocol,
|
|
71
|
+
logPrompts,
|
|
72
|
+
outfile,
|
|
73
|
+
useCollector,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/telemetry/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { parseBooleanEnvFlag, parseTelemetryTargetValue, resolveTelemetrySettings, } from './config.js';
|
|
8
|
+
import { TelemetryTarget } from './index.js';
|
|
9
|
+
describe('telemetry/config helpers', () => {
|
|
10
|
+
describe('parseBooleanEnvFlag', () => {
|
|
11
|
+
it('returns undefined for undefined', () => {
|
|
12
|
+
expect(parseBooleanEnvFlag(undefined)).toBeUndefined();
|
|
13
|
+
});
|
|
14
|
+
it('parses true values', () => {
|
|
15
|
+
expect(parseBooleanEnvFlag('true')).toBe(true);
|
|
16
|
+
expect(parseBooleanEnvFlag('1')).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
it('parses false/other values as false', () => {
|
|
19
|
+
expect(parseBooleanEnvFlag('false')).toBe(false);
|
|
20
|
+
expect(parseBooleanEnvFlag('0')).toBe(false);
|
|
21
|
+
expect(parseBooleanEnvFlag('TRUE')).toBe(false);
|
|
22
|
+
expect(parseBooleanEnvFlag('random')).toBe(false);
|
|
23
|
+
expect(parseBooleanEnvFlag('')).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('parseTelemetryTargetValue', () => {
|
|
27
|
+
it('parses string values', () => {
|
|
28
|
+
expect(parseTelemetryTargetValue('local')).toBe(TelemetryTarget.LOCAL);
|
|
29
|
+
expect(parseTelemetryTargetValue('gcp')).toBe(TelemetryTarget.GCP);
|
|
30
|
+
});
|
|
31
|
+
it('accepts enum values', () => {
|
|
32
|
+
expect(parseTelemetryTargetValue(TelemetryTarget.LOCAL)).toBe(TelemetryTarget.LOCAL);
|
|
33
|
+
expect(parseTelemetryTargetValue(TelemetryTarget.GCP)).toBe(TelemetryTarget.GCP);
|
|
34
|
+
});
|
|
35
|
+
it('returns undefined for unknown', () => {
|
|
36
|
+
expect(parseTelemetryTargetValue('other')).toBeUndefined();
|
|
37
|
+
expect(parseTelemetryTargetValue(undefined)).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('resolveTelemetrySettings', () => {
|
|
41
|
+
it('falls back to settings when no argv/env provided', async () => {
|
|
42
|
+
const settings = {
|
|
43
|
+
enabled: false,
|
|
44
|
+
target: TelemetryTarget.LOCAL,
|
|
45
|
+
otlpEndpoint: 'http://localhost:4317',
|
|
46
|
+
otlpProtocol: 'grpc',
|
|
47
|
+
logPrompts: false,
|
|
48
|
+
outfile: 'settings.log',
|
|
49
|
+
useCollector: false,
|
|
50
|
+
};
|
|
51
|
+
const resolved = await resolveTelemetrySettings({ settings });
|
|
52
|
+
expect(resolved).toEqual(settings);
|
|
53
|
+
});
|
|
54
|
+
it('uses env over settings and argv over env', async () => {
|
|
55
|
+
const settings = {
|
|
56
|
+
enabled: false,
|
|
57
|
+
target: TelemetryTarget.LOCAL,
|
|
58
|
+
otlpEndpoint: 'http://settings:4317',
|
|
59
|
+
otlpProtocol: 'grpc',
|
|
60
|
+
logPrompts: false,
|
|
61
|
+
outfile: 'settings.log',
|
|
62
|
+
useCollector: false,
|
|
63
|
+
};
|
|
64
|
+
const env = {
|
|
65
|
+
GEMINI_TELEMETRY_ENABLED: '1',
|
|
66
|
+
GEMINI_TELEMETRY_TARGET: 'gcp',
|
|
67
|
+
GEMINI_TELEMETRY_OTLP_ENDPOINT: 'http://env:4317',
|
|
68
|
+
GEMINI_TELEMETRY_OTLP_PROTOCOL: 'http',
|
|
69
|
+
GEMINI_TELEMETRY_LOG_PROMPTS: 'true',
|
|
70
|
+
GEMINI_TELEMETRY_OUTFILE: 'env.log',
|
|
71
|
+
GEMINI_TELEMETRY_USE_COLLECTOR: 'true',
|
|
72
|
+
};
|
|
73
|
+
const argv = {
|
|
74
|
+
telemetry: false,
|
|
75
|
+
telemetryTarget: 'local',
|
|
76
|
+
telemetryOtlpEndpoint: 'http://argv:4317',
|
|
77
|
+
telemetryOtlpProtocol: 'grpc',
|
|
78
|
+
telemetryLogPrompts: false,
|
|
79
|
+
telemetryOutfile: 'argv.log',
|
|
80
|
+
};
|
|
81
|
+
const resolvedEnv = await resolveTelemetrySettings({ env, settings });
|
|
82
|
+
expect(resolvedEnv).toEqual({
|
|
83
|
+
enabled: true,
|
|
84
|
+
target: TelemetryTarget.GCP,
|
|
85
|
+
otlpEndpoint: 'http://env:4317',
|
|
86
|
+
otlpProtocol: 'http',
|
|
87
|
+
logPrompts: true,
|
|
88
|
+
outfile: 'env.log',
|
|
89
|
+
useCollector: true,
|
|
90
|
+
});
|
|
91
|
+
const resolvedArgv = await resolveTelemetrySettings({
|
|
92
|
+
argv,
|
|
93
|
+
env,
|
|
94
|
+
settings,
|
|
95
|
+
});
|
|
96
|
+
expect(resolvedArgv).toEqual({
|
|
97
|
+
enabled: false,
|
|
98
|
+
target: TelemetryTarget.LOCAL,
|
|
99
|
+
otlpEndpoint: 'http://argv:4317',
|
|
100
|
+
otlpProtocol: 'grpc',
|
|
101
|
+
logPrompts: false,
|
|
102
|
+
outfile: 'argv.log',
|
|
103
|
+
useCollector: true, // from env as no argv option
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
it('falls back to OTEL_EXPORTER_OTLP_ENDPOINT when GEMINI var is missing', async () => {
|
|
107
|
+
const settings = {};
|
|
108
|
+
const env = {
|
|
109
|
+
OTEL_EXPORTER_OTLP_ENDPOINT: 'http://otel:4317',
|
|
110
|
+
};
|
|
111
|
+
const resolved = await resolveTelemetrySettings({ env, settings });
|
|
112
|
+
expect(resolved.otlpEndpoint).toBe('http://otel:4317');
|
|
113
|
+
});
|
|
114
|
+
it('throws on unknown protocol values', async () => {
|
|
115
|
+
const env = { GEMINI_TELEMETRY_OTLP_PROTOCOL: 'unknown' };
|
|
116
|
+
await expect(resolveTelemetrySettings({ env })).rejects.toThrow(/Invalid telemetry OTLP protocol/i);
|
|
117
|
+
});
|
|
118
|
+
it('throws on unknown target values', async () => {
|
|
119
|
+
const env = { GEMINI_TELEMETRY_TARGET: 'unknown' };
|
|
120
|
+
await expect(resolveTelemetrySettings({ env })).rejects.toThrow(/Invalid telemetry target/i);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/telemetry/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,10 @@ export declare const EVENT_API_REQUEST = "gemini_cli.api_request";
|
|
|
10
10
|
export declare const EVENT_API_ERROR = "gemini_cli.api_error";
|
|
11
11
|
export declare const EVENT_API_RESPONSE = "gemini_cli.api_response";
|
|
12
12
|
export declare const EVENT_CLI_CONFIG = "gemini_cli.config";
|
|
13
|
+
export declare const EVENT_EXTENSION_DISABLE = "gemini_cli.extension_disable";
|
|
14
|
+
export declare const EVENT_EXTENSION_ENABLE = "gemini_cli.extension_enable";
|
|
15
|
+
export declare const EVENT_EXTENSION_INSTALL = "gemini_cli.extension_install";
|
|
16
|
+
export declare const EVENT_EXTENSION_UNINSTALL = "gemini_cli.extension_uninstall";
|
|
13
17
|
export declare const EVENT_FLASH_FALLBACK = "gemini_cli.flash_fallback";
|
|
14
18
|
export declare const EVENT_RIPGREP_FALLBACK = "gemini_cli.ripgrep_fallback";
|
|
15
19
|
export declare const EVENT_NEXT_SPEAKER_CHECK = "gemini_cli.next_speaker_check";
|
|
@@ -22,6 +26,7 @@ export declare const EVENT_INVALID_CHUNK = "gemini_cli.chat.invalid_chunk";
|
|
|
22
26
|
export declare const EVENT_CONTENT_RETRY = "gemini_cli.chat.content_retry";
|
|
23
27
|
export declare const EVENT_CONTENT_RETRY_FAILURE = "gemini_cli.chat.content_retry_failure";
|
|
24
28
|
export declare const EVENT_FILE_OPERATION = "gemini_cli.file_operation";
|
|
29
|
+
export declare const EVENT_MODEL_SLASH_COMMAND = "gemini_cli.slash_command.model";
|
|
25
30
|
export declare const METRIC_TOOL_CALL_COUNT = "gemini_cli.tool.call.count";
|
|
26
31
|
export declare const METRIC_TOOL_CALL_LATENCY = "gemini_cli.tool.call.latency";
|
|
27
32
|
export declare const METRIC_API_REQUEST_COUNT = "gemini_cli.api.request.count";
|
|
@@ -32,3 +37,7 @@ export declare const METRIC_FILE_OPERATION_COUNT = "gemini_cli.file.operation.co
|
|
|
32
37
|
export declare const METRIC_INVALID_CHUNK_COUNT = "gemini_cli.chat.invalid_chunk.count";
|
|
33
38
|
export declare const METRIC_CONTENT_RETRY_COUNT = "gemini_cli.chat.content_retry.count";
|
|
34
39
|
export declare const METRIC_CONTENT_RETRY_FAILURE_COUNT = "gemini_cli.chat.content_retry_failure.count";
|
|
40
|
+
export declare const EVENT_MODEL_ROUTING = "gemini_cli.model_routing";
|
|
41
|
+
export declare const METRIC_MODEL_ROUTING_LATENCY = "gemini_cli.model_routing.latency";
|
|
42
|
+
export declare const METRIC_MODEL_ROUTING_FAILURE_COUNT = "gemini_cli.model_routing.failure.count";
|
|
43
|
+
export declare const METRIC_MODEL_SLASH_COMMAND_CALL_COUNT = "gemini_cli.slash_command.model.call_count";
|
|
@@ -10,6 +10,10 @@ export const EVENT_API_REQUEST = 'gemini_cli.api_request';
|
|
|
10
10
|
export const EVENT_API_ERROR = 'gemini_cli.api_error';
|
|
11
11
|
export const EVENT_API_RESPONSE = 'gemini_cli.api_response';
|
|
12
12
|
export const EVENT_CLI_CONFIG = 'gemini_cli.config';
|
|
13
|
+
export const EVENT_EXTENSION_DISABLE = 'gemini_cli.extension_disable';
|
|
14
|
+
export const EVENT_EXTENSION_ENABLE = 'gemini_cli.extension_enable';
|
|
15
|
+
export const EVENT_EXTENSION_INSTALL = 'gemini_cli.extension_install';
|
|
16
|
+
export const EVENT_EXTENSION_UNINSTALL = 'gemini_cli.extension_uninstall';
|
|
13
17
|
export const EVENT_FLASH_FALLBACK = 'gemini_cli.flash_fallback';
|
|
14
18
|
export const EVENT_RIPGREP_FALLBACK = 'gemini_cli.ripgrep_fallback';
|
|
15
19
|
export const EVENT_NEXT_SPEAKER_CHECK = 'gemini_cli.next_speaker_check';
|
|
@@ -22,6 +26,7 @@ export const EVENT_INVALID_CHUNK = 'gemini_cli.chat.invalid_chunk';
|
|
|
22
26
|
export const EVENT_CONTENT_RETRY = 'gemini_cli.chat.content_retry';
|
|
23
27
|
export const EVENT_CONTENT_RETRY_FAILURE = 'gemini_cli.chat.content_retry_failure';
|
|
24
28
|
export const EVENT_FILE_OPERATION = 'gemini_cli.file_operation';
|
|
29
|
+
export const EVENT_MODEL_SLASH_COMMAND = 'gemini_cli.slash_command.model';
|
|
25
30
|
export const METRIC_TOOL_CALL_COUNT = 'gemini_cli.tool.call.count';
|
|
26
31
|
export const METRIC_TOOL_CALL_LATENCY = 'gemini_cli.tool.call.latency';
|
|
27
32
|
export const METRIC_API_REQUEST_COUNT = 'gemini_cli.api.request.count';
|
|
@@ -32,4 +37,8 @@ export const METRIC_FILE_OPERATION_COUNT = 'gemini_cli.file.operation.count';
|
|
|
32
37
|
export const METRIC_INVALID_CHUNK_COUNT = 'gemini_cli.chat.invalid_chunk.count';
|
|
33
38
|
export const METRIC_CONTENT_RETRY_COUNT = 'gemini_cli.chat.content_retry.count';
|
|
34
39
|
export const METRIC_CONTENT_RETRY_FAILURE_COUNT = 'gemini_cli.chat.content_retry_failure.count';
|
|
40
|
+
export const EVENT_MODEL_ROUTING = 'gemini_cli.model_routing';
|
|
41
|
+
export const METRIC_MODEL_ROUTING_LATENCY = 'gemini_cli.model_routing.latency';
|
|
42
|
+
export const METRIC_MODEL_ROUTING_FAILURE_COUNT = 'gemini_cli.model_routing.failure.count';
|
|
43
|
+
export const METRIC_MODEL_SLASH_COMMAND_CALL_COUNT = 'gemini_cli.slash_command.model.call_count';
|
|
35
44
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/telemetry/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,6BAA6B,GACxC,oCAAoC,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GACtC,uCAAuC,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,kCAAkC,GAC7C,6CAA6C,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/telemetry/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AACtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,gCAAgC,CAAC;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;AAC9E,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,6BAA6B,GACxC,oCAAoC,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GACtC,uCAAuC,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,gCAAgC,CAAC;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iCAAiC,CAAC;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AAChF,MAAM,CAAC,MAAM,kCAAkC,GAC7C,6CAA6C,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAC9D,MAAM,CAAC,MAAM,4BAA4B,GAAG,kCAAkC,CAAC;AAC/E,MAAM,CAAC,MAAM,kCAAkC,GAC7C,wCAAwC,CAAC;AAC3C,MAAM,CAAC,MAAM,qCAAqC,GAChD,2CAA2C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { TraceExporter } from '@google-cloud/opentelemetry-cloud-trace-exporter';
|
|
7
|
+
import { MetricExporter } from '@google-cloud/opentelemetry-cloud-monitoring-exporter';
|
|
8
|
+
import type { ExportResult } from '@opentelemetry/core';
|
|
9
|
+
import type { ReadableLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs';
|
|
10
|
+
/**
|
|
11
|
+
* Google Cloud Trace exporter that extends the official trace exporter
|
|
12
|
+
*/
|
|
13
|
+
export declare class GcpTraceExporter extends TraceExporter {
|
|
14
|
+
constructor(projectId?: string);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Google Cloud Monitoring exporter that extends the official metrics exporter
|
|
18
|
+
*/
|
|
19
|
+
export declare class GcpMetricExporter extends MetricExporter {
|
|
20
|
+
constructor(projectId?: string);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Google Cloud Logging exporter that uses the Cloud Logging client
|
|
24
|
+
*/
|
|
25
|
+
export declare class GcpLogExporter implements LogRecordExporter {
|
|
26
|
+
private logging;
|
|
27
|
+
private log;
|
|
28
|
+
private pendingWrites;
|
|
29
|
+
constructor(projectId?: string);
|
|
30
|
+
export(logs: ReadableLogRecord[], resultCallback: (result: ExportResult) => void): void;
|
|
31
|
+
forceFlush(): Promise<void>;
|
|
32
|
+
shutdown(): Promise<void>;
|
|
33
|
+
private mapSeverityToCloudLogging;
|
|
34
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { TraceExporter } from '@google-cloud/opentelemetry-cloud-trace-exporter';
|
|
7
|
+
import { MetricExporter } from '@google-cloud/opentelemetry-cloud-monitoring-exporter';
|
|
8
|
+
import { Logging } from '@google-cloud/logging';
|
|
9
|
+
import { hrTimeToMilliseconds } from '@opentelemetry/core';
|
|
10
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
11
|
+
/**
|
|
12
|
+
* Google Cloud Trace exporter that extends the official trace exporter
|
|
13
|
+
*/
|
|
14
|
+
export class GcpTraceExporter extends TraceExporter {
|
|
15
|
+
constructor(projectId) {
|
|
16
|
+
super({
|
|
17
|
+
projectId,
|
|
18
|
+
resourceFilter: /^gcp\./,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Google Cloud Monitoring exporter that extends the official metrics exporter
|
|
24
|
+
*/
|
|
25
|
+
export class GcpMetricExporter extends MetricExporter {
|
|
26
|
+
constructor(projectId) {
|
|
27
|
+
super({
|
|
28
|
+
projectId,
|
|
29
|
+
prefix: 'custom.googleapis.com/gemini_cli',
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Google Cloud Logging exporter that uses the Cloud Logging client
|
|
35
|
+
*/
|
|
36
|
+
export class GcpLogExporter {
|
|
37
|
+
logging;
|
|
38
|
+
log;
|
|
39
|
+
pendingWrites = [];
|
|
40
|
+
constructor(projectId) {
|
|
41
|
+
this.logging = new Logging({ projectId });
|
|
42
|
+
this.log = this.logging.log('gemini_cli');
|
|
43
|
+
}
|
|
44
|
+
export(logs, resultCallback) {
|
|
45
|
+
try {
|
|
46
|
+
const entries = logs.map((log) => {
|
|
47
|
+
const entry = this.log.entry({
|
|
48
|
+
severity: this.mapSeverityToCloudLogging(log.severityNumber),
|
|
49
|
+
timestamp: new Date(hrTimeToMilliseconds(log.hrTime)),
|
|
50
|
+
resource: {
|
|
51
|
+
type: 'global',
|
|
52
|
+
labels: {
|
|
53
|
+
project_id: this.logging.projectId,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}, {
|
|
57
|
+
session_id: log.attributes?.['session.id'],
|
|
58
|
+
...log.attributes,
|
|
59
|
+
...log.resource?.attributes,
|
|
60
|
+
message: log.body,
|
|
61
|
+
});
|
|
62
|
+
return entry;
|
|
63
|
+
});
|
|
64
|
+
const writePromise = this.log
|
|
65
|
+
.write(entries)
|
|
66
|
+
.then(() => {
|
|
67
|
+
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
68
|
+
})
|
|
69
|
+
.catch((error) => {
|
|
70
|
+
resultCallback({
|
|
71
|
+
code: ExportResultCode.FAILED,
|
|
72
|
+
error,
|
|
73
|
+
});
|
|
74
|
+
})
|
|
75
|
+
.finally(() => {
|
|
76
|
+
const index = this.pendingWrites.indexOf(writePromise);
|
|
77
|
+
if (index > -1) {
|
|
78
|
+
this.pendingWrites.splice(index, 1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
this.pendingWrites.push(writePromise);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
resultCallback({
|
|
85
|
+
code: ExportResultCode.FAILED,
|
|
86
|
+
error: error,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async forceFlush() {
|
|
91
|
+
if (this.pendingWrites.length > 0) {
|
|
92
|
+
await Promise.all(this.pendingWrites);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async shutdown() {
|
|
96
|
+
await this.forceFlush();
|
|
97
|
+
this.pendingWrites = [];
|
|
98
|
+
}
|
|
99
|
+
mapSeverityToCloudLogging(severityNumber) {
|
|
100
|
+
if (!severityNumber)
|
|
101
|
+
return 'DEFAULT';
|
|
102
|
+
// Map OpenTelemetry severity numbers to Cloud Logging severity levels
|
|
103
|
+
// https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber
|
|
104
|
+
if (severityNumber >= 21)
|
|
105
|
+
return 'CRITICAL';
|
|
106
|
+
if (severityNumber >= 17)
|
|
107
|
+
return 'ERROR';
|
|
108
|
+
if (severityNumber >= 13)
|
|
109
|
+
return 'WARNING';
|
|
110
|
+
if (severityNumber >= 9)
|
|
111
|
+
return 'INFO';
|
|
112
|
+
if (severityNumber >= 5)
|
|
113
|
+
return 'DEBUG';
|
|
114
|
+
return 'DEFAULT';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=gcp-exporters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-exporters.js","sourceRoot":"","sources":["../../../src/telemetry/gcp-exporters.ts"],"names":[],"mappings":"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"}
|