Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
analytics.hpp
Go to the documentation of this file.
1#pragma once
2
3// Analytics — thread-safe event tracking with pluggable destinations.
4
5#include <string>
6#include <string_view>
7#include <vector>
8#include <map>
9#include <memory>
10#include <functional>
11#include <mutex>
12#include <chrono>
13#include <cstdint>
14
15namespace pulp::runtime {
16
19 std::string name;
20 std::map<std::string, std::string> properties;
21 double timestamp = 0; // Unix epoch seconds
22};
23
26public:
27 virtual ~AnalyticsDestination() = default;
28 virtual void log_event(const AnalyticsEvent& event) = 0;
29 virtual void flush() {}
30};
31
34public:
35 explicit FileAnalyticsDestination(std::string_view path);
36 void log_event(const AnalyticsEvent& event) override;
37 void flush() override;
38private:
39 std::string path_;
40 std::vector<AnalyticsEvent> buffer_;
41 std::mutex mutex_;
42};
43
45class Analytics {
46public:
47 static Analytics& instance();
48
50 void add_destination(std::unique_ptr<AnalyticsDestination> dest);
51
53 void log_event(std::string_view name,
54 const std::map<std::string, std::string>& properties = {});
55
57 void log(std::string_view name);
58
60 void flush();
61
63 void set_enabled(bool enabled) { enabled_ = enabled; }
64 bool is_enabled() const { return enabled_; }
65
67 uint64_t event_count() const { return event_count_; }
68
69private:
70 Analytics() = default;
71 std::vector<std::unique_ptr<AnalyticsDestination>> destinations_;
72 std::mutex mutex_;
73 bool enabled_ = true;
74 uint64_t event_count_ = 0;
75};
76
79public:
81 static void track_click(std::string_view widget_id);
82
84 static void track_value_change(std::string_view widget_id, std::string_view value);
85
87 static void track_preset_select(std::string_view preset_name);
88};
89
90} // namespace pulp::runtime
Abstract destination for analytics events.
Definition analytics.hpp:25
virtual void log_event(const AnalyticsEvent &event)=0
virtual void flush()
Definition analytics.hpp:29
virtual ~AnalyticsDestination()=default
Analytics singleton — thread-safe event logging.
Definition analytics.hpp:45
void set_enabled(bool enabled)
Enable/disable analytics.
Definition analytics.hpp:63
void add_destination(std::unique_ptr< AnalyticsDestination > dest)
Add a destination.
static Analytics & instance()
uint64_t event_count() const
Number of events logged since creation.
Definition analytics.hpp:67
bool is_enabled() const
Definition analytics.hpp:64
void flush()
Flush all destinations.
void log(std::string_view name)
Log a simple event (name only).
void log_event(std::string_view name, const std::map< std::string, std::string > &properties={})
Log an event with properties.
void log_event(const AnalyticsEvent &event) override
FileAnalyticsDestination(std::string_view path)
Widget interaction tracker — automatically logs UI events.
Definition analytics.hpp:78
static void track_value_change(std::string_view widget_id, std::string_view value)
Track a value change.
static void track_preset_select(std::string_view preset_name)
Track a preset selection.
static void track_click(std::string_view widget_id)
Track a button click.
Definition generated_event_source.hpp:33
Single analytics event.
Definition analytics.hpp:18
double timestamp
Definition analytics.hpp:21
std::string name
Definition analytics.hpp:19
std::map< std::string, std::string > properties
Definition analytics.hpp:20