mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
987dd994b6
Summary: Allocate and hook up a StructuredLogger at startup if the EdenConfig has the appropriate values set. Reviewed By: simpkins Differential Revision: D18071821 fbshipit-source-id: 3996b6644bbf0c16bb3b9950d57a79d4619a1656
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its 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 {
|
|
namespace 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 eden
|
|
} // namespace facebook
|