in prod/native/libphpbridge/code/OtlpExporter/LogsConverter.h [45:85]
opentelemetry::proto::collector::logs::v1::ExportLogsServiceRequest convert(AutoZval const &logs) {
opentelemetry::proto::collector::logs::v1::ExportLogsServiceRequest request;
std::unordered_map<std::string, opentelemetry::proto::logs::v1::ResourceLogs *> resourceLogsMap;
std::unordered_map<std::string, opentelemetry::proto::logs::v1::ScopeLogs *> scopeLogsMap;
if (!logs.isArray()) {
throw std::runtime_error("Invalid iterable passed to LogsConverter");
}
for (auto const &log : logs) {
auto resourceInfo = log.callMethod("getResource"sv);
auto instrumentationScope = log.callMethod("getInstrumentationScope"sv);
std::string resourceId = ConverterHelpers::getResourceId(resourceInfo);
std::string scopeId = ConverterHelpers::getScopeId(instrumentationScope);
opentelemetry::proto::logs::v1::ResourceLogs *resourceLogs;
if (resourceLogsMap.count(resourceId) == 0) {
resourceLogs = request.add_resource_logs();
convertResourceLogs(resourceInfo, resourceLogs);
resourceLogsMap[resourceId] = resourceLogs;
} else {
resourceLogs = resourceLogsMap[resourceId];
}
opentelemetry::proto::logs::v1::ScopeLogs *scopeLogs;
std::string compositeKey = resourceId + "|" + scopeId;
if (scopeLogsMap.count(compositeKey) == 0) {
scopeLogs = resourceLogs->add_scope_logs();
convertInstrumentationScope(instrumentationScope, scopeLogs);
scopeLogsMap[compositeKey] = scopeLogs;
} else {
scopeLogs = scopeLogsMap[compositeKey];
}
convertLogRecord(log, scopeLogs->add_log_records());
}
return request;
}