Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
control_telemetry_tap.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <chrono>
6#include <cstddef>
7#include <cstdint>
8#include <functional>
9#include <memory>
10#include <optional>
11#include <string>
12#include <vector>
13
14namespace pulp::inspect {
15
16enum class ControlTelemetrySensitivity : std::uint8_t { Observable, Sensitive };
17
19 std::string client_id;
20 std::string registration_id;
21 std::string instance_id;
22 std::string grant_id;
23 bool allow_sensitive = false;
24};
25
27 std::vector<std::string> channels;
28 double rate_hz = 15.0;
29 std::size_t maximum_vector_values = 256;
30};
31
33 std::string channel;
34 view::ValueChannelShape shape = view::ValueChannelShape::scalar;
35 std::vector<float> values;
36 std::uint64_t source_publication = 0;
37 std::uint64_t source_dropped = 0;
38 bool redacted = false;
39 bool source_alive = false;
40};
41
43 std::uint64_t sequence = 0;
44 std::uint64_t sampled_at_ns = 0;
45 std::uint64_t dropped_since_previous = 0;
46 std::vector<ControlTelemetryChannelSample> channels;
47};
48
51 bool enabled = false;
52 double minimum_rate_hz = 0.1;
53 double maximum_rate_hz = 60.0;
54 std::size_t maximum_subscriptions = 32;
57 std::size_t maximum_vector_values = 512;
58 std::size_t maximum_queued_frames = 4;
59};
60
68 public:
69 using Clock = std::function<std::chrono::steady_clock::time_point()>;
70 using Classifier = std::function<ControlTelemetrySensitivity(std::string_view)>;
71
77 ControlTelemetryTap& operator=(const ControlTelemetryTap&) = delete;
78
79 bool attach(view::ValueChannelTelemetryAttachment attachment, Classifier classifier = {});
80 void detach() noexcept;
81 std::optional<std::string> subscribe(const ControlTelemetryAuthority& authority,
83 bool unsubscribe(std::string_view subscription_id, const ControlTelemetryAuthority& authority);
84 std::size_t end_authority(const ControlTelemetryAuthority& authority) noexcept;
85 void poll();
86 std::optional<ControlTelemetryFrame> try_pop(std::string_view subscription_id,
87 const ControlTelemetryAuthority& authority);
88 double effective_rate_hz(double requested_rate_hz) const noexcept;
89 std::size_t subscription_count() const noexcept;
90
91 private:
92 struct Impl;
93 std::unique_ptr<Impl> impl_;
94};
95
96} // namespace pulp::inspect
Exclusive reader attachment for every telemetry sidecar in one channel set.
Definition value_channel_telemetry.hpp:88
std::optional< ControlTelemetryFrame > try_pop(std::string_view subscription_id, const ControlTelemetryAuthority &authority)
std::size_t subscription_count() const noexcept
double effective_rate_hz(double requested_rate_hz) const noexcept
std::function< ControlTelemetrySensitivity(std::string_view)> Classifier
Definition control_telemetry_tap.hpp:70
ControlTelemetryTap(ControlTelemetryTapConfig config, Clock clock={})
std::function< std::chrono::steady_clock::time_point()> Clock
Definition control_telemetry_tap.hpp:69
bool unsubscribe(std::string_view subscription_id, const ControlTelemetryAuthority &authority)
bool attach(view::ValueChannelTelemetryAttachment attachment, Classifier classifier={})
std::size_t end_authority(const ControlTelemetryAuthority &authority) noexcept
std::optional< std::string > subscribe(const ControlTelemetryAuthority &authority, ControlTelemetrySubscriptionRequest request)
ControlTelemetryTap(ControlTelemetryTap &&) noexcept
ValueChannelShape
The shape of a channel's payload.
Definition value_channel_telemetry.hpp:21
Definition agent_context.hpp:7
@ Sensitive
Definition capabilities.hpp:25
ControlTelemetrySensitivity
Definition control_telemetry_tap.hpp:16
@ Observable
Definition control_telemetry_tap.hpp:16
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
STL namespace.
Definition control_telemetry_tap.hpp:18
std::string instance_id
Definition control_telemetry_tap.hpp:21
std::string grant_id
Definition control_telemetry_tap.hpp:22
std::string registration_id
Definition control_telemetry_tap.hpp:20
std::string client_id
Definition control_telemetry_tap.hpp:19
bool allow_sensitive
Definition control_telemetry_tap.hpp:23
Definition control_telemetry_tap.hpp:32
std::string channel
Definition control_telemetry_tap.hpp:33
bool redacted
Definition control_telemetry_tap.hpp:38
std::uint64_t source_dropped
Definition control_telemetry_tap.hpp:37
std::vector< float > values
Definition control_telemetry_tap.hpp:35
bool source_alive
Definition control_telemetry_tap.hpp:39
view::ValueChannelShape shape
Definition control_telemetry_tap.hpp:34
std::uint64_t source_publication
Definition control_telemetry_tap.hpp:36
Definition control_telemetry_tap.hpp:42
std::uint64_t dropped_since_previous
Definition control_telemetry_tap.hpp:45
std::uint64_t sequence
Definition control_telemetry_tap.hpp:43
std::vector< ControlTelemetryChannelSample > channels
Definition control_telemetry_tap.hpp:46
std::uint64_t sampled_at_ns
Definition control_telemetry_tap.hpp:44
Definition control_telemetry_tap.hpp:26
std::vector< std::string > channels
Definition control_telemetry_tap.hpp:27
double rate_hz
Definition control_telemetry_tap.hpp:28
std::size_t maximum_vector_values
Definition control_telemetry_tap.hpp:29
Definition control_telemetry_tap.hpp:49
bool enabled
Fail closed until a developer/test host explicitly enables the tap.
Definition control_telemetry_tap.hpp:51
std::size_t maximum_channels_per_subscription
Definition control_telemetry_tap.hpp:56
std::size_t maximum_subscriptions_per_client
Definition control_telemetry_tap.hpp:55
std::size_t maximum_vector_values
Definition control_telemetry_tap.hpp:57
std::size_t maximum_subscriptions
Definition control_telemetry_tap.hpp:54
std::size_t maximum_queued_frames
Definition control_telemetry_tap.hpp:58
double minimum_rate_hz
Definition control_telemetry_tap.hpp:52
double maximum_rate_hz
Definition control_telemetry_tap.hpp:53
Source-compatible spelling of <pulp/dataplane/value_channel_telemetry.hpp>.