9#ifndef LLDB_CORE_TELEMETRY_H
10#define LLDB_CORE_TELEMETRY_H
18#include "llvm/ADT/FunctionExtras.h"
19#include "llvm/ADT/StringExtras.h"
20#include "llvm/ADT/StringRef.h"
21#include "llvm/Support/JSON.h"
22#include "llvm/Telemetry/Telemetry.h"
65 static const llvm::telemetry::KindType
BaseInfo = 0b11000000;
66 static const llvm::telemetry::KindType
ClientInfo = 0b11100000;
67 static const llvm::telemetry::KindType
CommandInfo = 0b11010000;
76 std::chrono::nanoseconds>;
88 llvm::telemetry::KindType
getKind()
const override {
97 void serialize(llvm::telemetry::Serializer &serializer)
const override;
106 llvm::telemetry::KindType
getKind()
const override {
116 void serialize(llvm::telemetry::Serializer &serializer)
const override;
136 std::optional<std::string>
args;
144 llvm::telemetry::KindType
getKind()
const override {
153 void serialize(llvm::telemetry::Serializer &serializer)
const override;
172 llvm::telemetry::KindType
getKind()
const override {
182 void serialize(llvm::telemetry::Serializer &serializer)
const override;
201 llvm::telemetry::KindType
getKind()
const override {
210 void serialize(llvm::telemetry::Serializer &serializer)
const override;
226 llvm::telemetry::KindType
getKind()
const override {
235 void serialize(llvm::telemetry::Serializer &serializer)
const override;
259 static void SetInstance(std::unique_ptr<TelemetryManager> manger);
293 void DispatchNow(llvm::unique_function<
void(Info *info)> populate_fields_cb) {
295 if (!manager->
GetConfig()->EnableTelemetry)
300 info.end_time = std::chrono::steady_clock::now();
303 populate_fields_cb(&info);
305 if (llvm::Error er = manager->dispatch(&info)) {
307 "Failed to dispatch entry of type {1}: {0}",
#define LLDB_LOG_ERROR(log, error,...)
A class to manage flag bits.
Represents UUID's of various sizes.
The base Telemetry manager instance in LLDB.
const std::string & GetSessionId() const
virtual void DispatchClientTelemetry(const lldb_private::StructuredDataImpl &entry, Debugger *debugger)
static void SetInstance(std::unique_ptr< TelemetryManager > manger)
const LLDBConfig * GetConfig()
TelemetryManager(std::unique_ptr< LLDBConfig > config)
llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override
virtual llvm::StringRef GetInstanceName() const =0
static TelemetryManager * GetInstance()
static std::unique_ptr< TelemetryManager > g_instance
std::unique_ptr< LLDBConfig > m_config
#define LLDB_INVALID_PROCESS_ID
std::chrono::time_point< std::chrono::steady_clock, std::chrono::nanoseconds > SteadyTimePoint
Defines a convenient type for timestamp of various events.
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
std::shared_ptr< lldb_private::Module > ModuleSP
void serialize(llvm::telemetry::Serializer &serializer) const override
static bool classof(const llvm::telemetry::TelemetryInfo *t)
llvm::telemetry::KindType getKind() const override
std::optional< std::string > error_msg
void serialize(llvm::telemetry::Serializer &serializer) const override
std::optional< std::string > original_command
These two fields are not collected by default due to PII risks.
std::string command_name
The command name(eg., "breakpoint set")
std::optional< lldb::ReturnStatus > ret_status
Return status of a command and any error description in case of error.
UUID target_uuid
If the command is/can be associated with a target entry this field contains that target's UUID.
std::optional< std::string > args
uint64_t command_id
A unique ID for a command so the manager can match the start entry with its end entry.
static std::atomic< uint64_t > g_command_id_seed
static uint64_t GetNextID()
static bool classof(const llvm::telemetry::TelemetryInfo *T)
std::optional< std::string > error_data
llvm::telemetry::KindType getKind() const override
llvm::telemetry::KindType getKind() const override
static bool classof(const llvm::telemetry::TelemetryInfo *T)
void serialize(llvm::telemetry::Serializer &serializer) const override
void serialize(llvm::telemetry::Serializer &serializer) const override
llvm::telemetry::KindType getKind() const override
std::string triple
The triple of this executable module.
bool is_start_entry
If true, this entry was emitted at the beginning of an event (eg., before the executable is set).
static bool classof(const TelemetryInfo *T)
ExecutableModuleInfo()=default
UUID uuid
The same as the executable-module's UUID.
lldb::pid_t pid
PID of the process owned by this target.
Describes an exit status.
SteadyTimePoint start_time
Start time of an event.
lldb::user_id_t debugger_id
static bool classof(const llvm::telemetry::TelemetryInfo *t)
void serialize(llvm::telemetry::Serializer &serializer) const override
llvm::telemetry::KindType getKind() const override
std::optional< SteadyTimePoint > end_time
End time of an event - may be empty if not meaningful.
const bool enable_client_telemetry
LLDBConfig(bool enable_telemetry, bool detailed_command_telemetry, bool enable_client_telemetry)
const bool detailed_command_telemetry
static const llvm::telemetry::KindType BaseInfo
static const llvm::telemetry::KindType DebuggerInfo
static const llvm::telemetry::KindType ClientInfo
static const llvm::telemetry::KindType CommandInfo
static const llvm::telemetry::KindType ProcessExitInfo
static const llvm::telemetry::KindType ExecModuleInfo
std::optional< ExitDescription > exit_desc
llvm::telemetry::KindType getKind() const override
void serialize(llvm::telemetry::Serializer &serializer) const override
static bool classof(const TelemetryInfo *T)
ScopedDispatcher(llvm::unique_function< void(Info *info)> final_callback, Debugger *debugger=nullptr)
void DispatchOnExit(llvm::unique_function< void(Info *info)> final_callback)
void DispatchNow(llvm::unique_function< void(Info *info)> populate_fields_cb)
llvm::unique_function< void(Info *info)> m_final_callback
SteadyTimePoint m_start_time
ScopedDispatcher(Debugger *debugger=nullptr)
void SetDebugger(Debugger *debugger)