@opentelemetry/otlp-grpc-exporter-base
Version:
OpenTelemetry OTLP-gRPC Exporter base (for internal use only)
78 lines • 3.65 kB
JavaScript
;
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOtlpGrpcDefaultConfiguration = exports.mergeOtlpGrpcConfigurationWithDefaults = exports.validateAndNormalizeUrl = void 0;
const otlp_exporter_base_1 = require("@opentelemetry/otlp-exporter-base");
const grpc_exporter_transport_1 = require("../grpc-exporter-transport");
const url_1 = require("url");
const api_1 = require("@opentelemetry/api");
function validateAndNormalizeUrl(url) {
url = url.trim();
const hasProtocol = url.match(/^([\w]{1,8}):\/\//);
if (!hasProtocol) {
url = `https://${url}`;
}
const target = new url_1.URL(url);
if (target.protocol === 'unix:') {
return url;
}
if (target.pathname && target.pathname !== '/') {
api_1.diag.warn('URL path should not be set when using grpc, the path part of the URL will be ignored.');
}
if (target.protocol !== '' && !target.protocol?.match(/^(http)s?:$/)) {
api_1.diag.warn('URL protocol should be http(s)://. Using http://.');
}
return target.host;
}
exports.validateAndNormalizeUrl = validateAndNormalizeUrl;
function overrideMetadataEntriesIfNotPresent(metadata, additionalMetadata) {
for (const [key, value] of Object.entries(additionalMetadata.getMap())) {
// only override with env var data if the key has no values.
// not using Metadata.merge() as it will keep both values.
if (metadata.get(key).length < 1) {
metadata.set(key, value);
}
}
}
function mergeOtlpGrpcConfigurationWithDefaults(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration) {
const rawUrl = userProvidedConfiguration.url ??
fallbackConfiguration.url ??
defaultConfiguration.url;
return {
...(0, otlp_exporter_base_1.mergeOtlpSharedConfigurationWithDefaults)(userProvidedConfiguration, fallbackConfiguration, defaultConfiguration),
metadata: () => {
const metadata = defaultConfiguration.metadata();
overrideMetadataEntriesIfNotPresent(metadata,
// clone to ensure we don't modify what the user gave us in case they hold on to the returned reference
userProvidedConfiguration.metadata?.().clone() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)());
overrideMetadataEntriesIfNotPresent(metadata, fallbackConfiguration.metadata?.() ?? (0, grpc_exporter_transport_1.createEmptyMetadata)());
return metadata;
},
url: validateAndNormalizeUrl(rawUrl),
credentials: userProvidedConfiguration.credentials ??
fallbackConfiguration.credentials?.(rawUrl) ??
defaultConfiguration.credentials(rawUrl),
userAgent: userProvidedConfiguration.userAgent,
};
}
exports.mergeOtlpGrpcConfigurationWithDefaults = mergeOtlpGrpcConfigurationWithDefaults;
function getOtlpGrpcDefaultConfiguration() {
return {
...(0, otlp_exporter_base_1.getSharedConfigurationDefaults)(),
metadata: () => (0, grpc_exporter_transport_1.createEmptyMetadata)(),
url: 'http://localhost:4317',
credentials: (url) => {
if (url.startsWith('http://')) {
return () => (0, grpc_exporter_transport_1.createInsecureCredentials)();
}
else {
return () => (0, grpc_exporter_transport_1.createSslCredentials)();
}
},
};
}
exports.getOtlpGrpcDefaultConfiguration = getOtlpGrpcDefaultConfiguration;
//# sourceMappingURL=otlp-grpc-configuration.js.map