sapling/eden/fs/telemetry/ScubaStructuredLogger.cpp
Chad Austin 9fa292b9ed standardize namespaces on C++17 syntax
Reviewed By: genevievehelsel

Differential Revision: D36429182

fbshipit-source-id: 7d355917abf463493c37139856810de13e1090ff
2022-05-17 10:12:56 -07:00

58 lines
1.4 KiB
C++

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This software may be used and distributed according to the terms of the
* GNU General Public License version 2.
*/
#include "eden/fs/telemetry/ScubaStructuredLogger.h"
#include <folly/json.h>
#include <folly/logging/xlog.h>
#include "eden/fs/config/EdenConfig.h"
#include "eden/fs/telemetry/SubprocessScribeLogger.h"
namespace facebook::eden {
namespace {
template <typename Key, typename Value>
folly::dynamic dynamicMap(const std::unordered_map<Key, Value>& map) {
folly::dynamic o = folly::dynamic::object;
for (const auto& [key, value] : map) {
o[key] = value;
}
return o;
}
} // namespace
ScubaStructuredLogger::ScubaStructuredLogger(
std::shared_ptr<ScribeLogger> scribeLogger,
SessionInfo sessionInfo)
: StructuredLogger{true, std::move(sessionInfo)},
scribeLogger_{std::move(scribeLogger)} {}
void ScubaStructuredLogger::logDynamicEvent(DynamicEvent event) {
folly::dynamic document = folly::dynamic::object;
const auto& intMap = event.getIntMap();
if (!intMap.empty()) {
document["int"] = dynamicMap(intMap);
}
const auto& stringMap = event.getStringMap();
if (!stringMap.empty()) {
document["normal"] = dynamicMap(stringMap);
}
const auto& doubleMap = event.getDoubleMap();
if (!doubleMap.empty()) {
document["double"] = dynamicMap(doubleMap);
}
scribeLogger_->log(folly::toJson(document));
}
} // namespace facebook::eden