@sap/opentelemetry-exporter-for-sap-cloud-logging
Version:
A set of auto-configured OpenTelemetry exporters for SAP Cloud Logging
48 lines • 2.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MultiLogRecordExporter = void 0;
const core_1 = require("@opentelemetry/core");
const api_1 = require("@opentelemetry/api");
class MultiLogRecordExporter {
constructor(className = "MultiLogRecordExporter") {
this.logRecordExporters = [];
this.diagLogger = api_1.diag.createComponentLogger({
namespace: className
});
}
async forceFlush() {
const results = await Promise.allSettled(this.logRecordExporters.map((exporter) => exporter.forceFlush()));
const failures = results.filter((result) => result.status === "rejected");
if (failures.length > 0) {
for (const failure of failures) {
this.diagLogger.warn("Error returned by forceFlush.", failure.reason);
}
throw new Error(`forceFlush failed for ${failures.length} exporter(s).`);
}
}
add(...exporters) {
this.logRecordExporters.push(...exporters);
}
export(logs, resultCallback) {
let promises = this.logRecordExporters.map((exporter) => new Promise((resolve) => exporter.export(logs, (result) => {
if (result.code == core_1.ExportResultCode.FAILED && result.error) {
this.diagLogger.warn("Error returned by the export.", result.error);
}
resolve(result);
})));
Promise.all(promises).then((results) => resultCallback({ code: results.every(result => result.code == core_1.ExportResultCode.SUCCESS) ? core_1.ExportResultCode.SUCCESS : core_1.ExportResultCode.FAILED }));
}
shutdown() {
let promises = this.logRecordExporters.map((exporter) => exporter.shutdown());
let overallPromise = new Promise((resolve, reject) => {
Promise.all(promises).then(() => {
resolve();
}).catch((reason) => {
reject(reason);
});
});
return overallPromise;
}
}
exports.MultiLogRecordExporter = MultiLogRecordExporter;
//# sourceMappingURL=multiLogExporter.js.map