From 78c7798af9bd1267ce73be66d25b23e0615951c8 Mon Sep 17 00:00:00 2001 From: John Elliott Date: Wed, 28 Feb 2024 14:45:08 -0800 Subject: [PATCH] Move DynamicEvent from eden to edencommon Summary: To support better telemetry and logging in watchman we want to use Eden's components. Lets migrate and detangle the needed pieces. This change move DynamicEvent from eden to edencommon. Reviewed By: kmancini Differential Revision: D54046154 fbshipit-source-id: de9466c73c0b2a2a16302cc0114e4c2a12426b30 --- eden/fs/telemetry/CMakeLists.txt | 1 + eden/fs/telemetry/DynamicEvent.cpp | 55 ---------------------------- eden/fs/telemetry/DynamicEvent.h | 59 ------------------------------ eden/fs/telemetry/LogEvent.h | 2 +- eden/fs/telemetry/TARGETS | 6 +-- 5 files changed, 3 insertions(+), 120 deletions(-) delete mode 100644 eden/fs/telemetry/DynamicEvent.cpp delete mode 100644 eden/fs/telemetry/DynamicEvent.h diff --git a/eden/fs/telemetry/CMakeLists.txt b/eden/fs/telemetry/CMakeLists.txt index cfdb09b2b9e9d..e9c30229fc511 100644 --- a/eden/fs/telemetry/CMakeLists.txt +++ b/eden/fs/telemetry/CMakeLists.txt @@ -16,6 +16,7 @@ target_link_libraries( eden_config eden_service_thrift_util eden_utils + edencommon::edencommon_telemetry fb303::fb303 Folly::folly ) diff --git a/eden/fs/telemetry/DynamicEvent.cpp b/eden/fs/telemetry/DynamicEvent.cpp deleted file mode 100644 index 6b915194799dd..0000000000000 --- a/eden/fs/telemetry/DynamicEvent.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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/DynamicEvent.h" - -#include -#include -#include -#include "eden/common/utils/Throw.h" - -namespace { -void validateUtf8(folly::StringPiece sp) { - auto* p = reinterpret_cast(sp.begin()); - auto* const end = reinterpret_cast(sp.end()); - while (p < end) { - (void)folly::utf8ToCodePoint(p, end, false); - } -} -} // namespace - -namespace facebook::eden { - -void DynamicEvent::addInt(std::string name, int64_t value) { - auto [iter, inserted] = ints_.emplace(std::move(name), value); - if (!inserted) { - throw_( - "Attempted to insert duplicate int: ", iter->first); - } -} - -void DynamicEvent::addString(std::string name, std::string value) { - validateUtf8(value); - auto [iter, inserted] = strings_.emplace(std::move(name), std::move(value)); - if (!inserted) { - throw_( - "Attempted to insert duplicate string: ", iter->first); - } -} - -void DynamicEvent::addDouble(std::string name, double value) { - XCHECK(std::isfinite(value)) - << "Attempted to insert double-precision value that cannot be represented in JSON: " - << name; - auto [iter, inserted] = doubles_.emplace(std::move(name), value); - if (!inserted) { - throw_( - "Attempted to insert duplicate double: ", iter->first); - } -} - -} // namespace facebook::eden diff --git a/eden/fs/telemetry/DynamicEvent.h b/eden/fs/telemetry/DynamicEvent.h deleted file mode 100644 index c740483e334cc..0000000000000 --- a/eden/fs/telemetry/DynamicEvent.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 -#include -#include -#include - -namespace facebook::eden { - -class DynamicEvent { - public: - using IntMap = std::unordered_map; - using StringMap = std::unordered_map; - using DoubleMap = std::unordered_map; - - DynamicEvent() = default; - DynamicEvent(const DynamicEvent&) = default; - DynamicEvent(DynamicEvent&&) = default; - DynamicEvent& operator=(const DynamicEvent&) = default; - DynamicEvent& operator=(DynamicEvent&&) = default; - - void addInt(std::string name, int64_t value); - void addString(std::string name, std::string value); - void addDouble(std::string name, double value); - - /** - * Convenience function that adds boolean values as integer 0 or 1. - */ - void addBool(std::string name, bool value) { - addInt(std::move(name), value); - } - - const IntMap& getIntMap() const { - return ints_; - } - const StringMap& getStringMap() const { - return strings_; - } - const DoubleMap& getDoubleMap() const { - return doubles_; - } - - private: - // Due to limitations in the underlying log database, limit the field types to - // int64_t, double, string, and vector - // TODO: add vector support if needed. - IntMap ints_; - StringMap strings_; - DoubleMap doubles_; -}; - -} // namespace facebook::eden diff --git a/eden/fs/telemetry/LogEvent.h b/eden/fs/telemetry/LogEvent.h index 4464b99947087..1be9a64903838 100644 --- a/eden/fs/telemetry/LogEvent.h +++ b/eden/fs/telemetry/LogEvent.h @@ -13,7 +13,7 @@ #include #include "eden/common/os/ProcessId.h" -#include "eden/fs/telemetry/DynamicEvent.h" +#include "eden/common/telemetry/DynamicEvent.h" namespace facebook::eden { diff --git a/eden/fs/telemetry/TARGETS b/eden/fs/telemetry/TARGETS index fd7c744dd8c3f..65a1c08debfdf 100644 --- a/eden/fs/telemetry/TARGETS +++ b/eden/fs/telemetry/TARGETS @@ -101,27 +101,23 @@ cpp_library( cpp_library( name = "log_info", srcs = [ - "DynamicEvent.cpp", "SessionId.cpp", "SessionInfo.cpp", ], headers = [ - "DynamicEvent.h", "LogEvent.h", "SessionId.h", "SessionInfo.h", ], deps = [ - "//eden/common/utils:throw", "//eden/fs/utils:sysctl_util", "//folly:conv", "//folly:exception", - "//folly:unicode", - "//folly/logging:logging", "//folly/portability:unistd", ], exported_deps = [ "//eden/common/os:os", + "//eden/common/telemetry:log_info", "//folly/portability:sys_types", ], )