blob: c3192d5eae543dd8fb63ee179adf23c515fc0840 [file] [log] [blame]
// Copyright 2024 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/zxdb/client/analytics_reporter.h"
#include <chrono>
#include "src/developer/debug/zxdb/client/analytics.h"
#include "src/developer/debug/zxdb/client/analytics_event.h"
#include "src/lib/uuid/uuid.h"
namespace zxdb {
AnalyticsReporter::AnalyticsReporter() : session_id_(uuid::Generate()) {}
void AnalyticsReporter::Init(Session* session) {
session_ = session;
start_time_ = std::chrono::steady_clock::now();
}
void AnalyticsReporter::ReportInvoked() const {
Analytics::IfEnabledSendEvent(session_,
std::make_unique<analytics::core_dev_tools::InvokeEvent>());
}
void AnalyticsReporter::ReportSessionStarted() const {
Analytics::IfEnabledSendEvent(session_, std::make_unique<SessionStarted>(session_id_));
}
void AnalyticsReporter::ReportSessionConnected(bool is_minidump, bool local_agent) const {
auto connected = std::make_unique<SessionConnected>(session_id_);
// Check for minidump first, since this will also set System::Where to local and we want to
// differentiate between a locally running DebugAgent and a minidump.
if (is_minidump) {
connected->SetRemoteType(SessionConnected::RemoteType::kMinidump);
} else if (local_agent) {
connected->SetRemoteType(SessionConnected::RemoteType::kLocalAgent);
} else {
connected->SetRemoteType(SessionConnected::RemoteType::kRemoteAgent);
}
Analytics::IfEnabledSendEvent(session_, std::move(connected));
}
void AnalyticsReporter::ReportSessionEnded() const {
auto session_ended = std::make_unique<SessionEnded>(session_id_);
auto session_time = std::chrono::steady_clock::now() - start_time_;
session_ended->SetSessionTime(
std::chrono::duration_cast<std::chrono::milliseconds>(session_time));
Analytics::IfEnabledSendEvent(session_, std::move(session_ended));
}
void AnalyticsReporter::ReportCommand(const CommandReport& report) const {
auto command_event = std::make_unique<CommandEvent>(session_id_);
command_event->FromCommandReport(report);
Analytics::IfEnabledSendEvent(session_, std::move(command_event));
}
void AnalyticsReporter::ReportConsoleType(ConsoleType::Type type) const {
auto console_type = std::make_unique<ConsoleType>(session_id_);
console_type->SetConsoleType(type);
Analytics::IfEnabledSendEvent(session_, std::move(console_type));
}
} // namespace zxdb