@opentelemetry/otlp-transformer
Version:
Transform OpenTelemetry SDK data into OTLP
82 lines • 3.35 kB
JavaScript
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.toLogAttributes = exports.createExportLogsServiceRequest = void 0;
const utils_1 = require("../common/utils");
const internal_1 = require("../common/internal");
function createExportLogsServiceRequest(logRecords, options) {
const encoder = (0, utils_1.getOtlpEncoder)(options);
return {
resourceLogs: logRecordsToResourceLogs(logRecords, encoder),
};
}
exports.createExportLogsServiceRequest = createExportLogsServiceRequest;
function createResourceMap(logRecords) {
const resourceMap = new Map();
for (const record of logRecords) {
const { resource, instrumentationScope: { name, version = '', schemaUrl = '' }, } = record;
let ismMap = resourceMap.get(resource);
if (!ismMap) {
ismMap = new Map();
resourceMap.set(resource, ismMap);
}
const ismKey = `${name}@${version}:${schemaUrl}`;
let records = ismMap.get(ismKey);
if (!records) {
records = [];
ismMap.set(ismKey, records);
}
records.push(record);
}
return resourceMap;
}
function logRecordsToResourceLogs(logRecords, encoder) {
const resourceMap = createResourceMap(logRecords);
return Array.from(resourceMap, ([resource, ismMap]) => ({
resource: (0, internal_1.createResource)(resource),
scopeLogs: Array.from(ismMap, ([, scopeLogs]) => {
return {
scope: (0, internal_1.createInstrumentationScope)(scopeLogs[0].instrumentationScope),
logRecords: scopeLogs.map(log => toLogRecord(log, encoder)),
schemaUrl: scopeLogs[0].instrumentationScope.schemaUrl,
};
}),
schemaUrl: undefined,
}));
}
function toLogRecord(log, encoder) {
return {
timeUnixNano: encoder.encodeHrTime(log.hrTime),
observedTimeUnixNano: encoder.encodeHrTime(log.hrTimeObserved),
severityNumber: toSeverityNumber(log.severityNumber),
severityText: log.severityText,
body: (0, internal_1.toAnyValue)(log.body),
attributes: toLogAttributes(log.attributes),
droppedAttributesCount: log.droppedAttributesCount,
flags: log.spanContext?.traceFlags,
traceId: encoder.encodeOptionalSpanContext(log.spanContext?.traceId),
spanId: encoder.encodeOptionalSpanContext(log.spanContext?.spanId),
};
}
function toSeverityNumber(severityNumber) {
return severityNumber;
}
function toLogAttributes(attributes) {
return Object.keys(attributes).map(key => (0, internal_1.toKeyValue)(key, attributes[key]));
}
exports.toLogAttributes = toLogAttributes;
//# sourceMappingURL=internal.js.map
;