sapling/eden/fs/telemetry/StructuredLogger.h
Xavier Deguillard a29d465ee8 fs: fix license header
Summary:
With Facebook having been renamed Meta Platforms, we need to change the license
headers.

Reviewed By: fanzeyi

Differential Revision: D33407812

fbshipit-source-id: b11bfbbf13a48873f0cea75f212cc7b07a68fb2e
2022-01-04 15:00:07 -08:00

53 lines
1.3 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.
*/
#pragma once
#include <unordered_map>
#include "eden/fs/telemetry/LogEvent.h"
#include "eden/fs/telemetry/SessionInfo.h"
namespace facebook {
namespace eden {
class StructuredLogger {
public:
explicit StructuredLogger(bool enabled, SessionInfo sessionInfo);
virtual ~StructuredLogger() = default;
template <typename Event>
void logEvent(const Event& event) {
// Avoid a bunch of work if it's going to be thrown away by the
// logDynamicEvent implementation.
if (!enabled_) {
return;
}
// constexpr to ensure that the type field on the Event struct is constexpr
// too.
constexpr const char* type = Event::type;
// TODO: consider moving the event to another thread and populating the
// default fields there to reduce latency at the call site.
DynamicEvent de{populateDefaultFields(type)};
event.populate(de);
logDynamicEvent(std::move(de));
}
private:
virtual void logDynamicEvent(DynamicEvent event) = 0;
DynamicEvent populateDefaultFields(const char* type);
bool enabled_;
uint32_t sessionId_;
SessionInfo sessionInfo_;
};
} // namespace eden
} // namespace facebook