本页面介绍了 libsdv_telemetry_rust_wrapper 库中的类型、方法和错误处理。
TelemetryServiceHolder 接口
客户端的主要接口是 TelemetryServiceHolder 结构体。此接口提供了一整套用于管理服务连接、指标配置和数据报告的方法。
服务生命周期管理
这些方法用于建立和终止与底层遥测服务的连接。
get
pub fn get() -> TelemetryResult<TelemetryServiceHolder>
一种静态方法,用于检索 Telemetry 服务的线程安全句柄。这是一个阻塞调用,会一直等待,直到遥测绑定器服务准备就绪。Telemetry 服务仅支持 TelemetryServiceHolder 的单个实例。多次调用此方法会导致未定义或意外的行为。
TelemetryServiceHolder 实现 Send 和 Sync 特征,这意味着它可以安全地跨线程共享,例如通过将其封装在 Arc 的实例中。TelemetryServiceHolder 的大多数方法都是 async,可以并发使用。
| 返回 | |
|---|---|
TelemetryResult<TelemetryServiceHolder>
|
包含服务句柄的结果,如果无法获取服务,则为 TelemetryError 实例
|
init
pub async fn init(
&self,
misc_status_callback: impl Fn(TelemetryServiceStatus) + Send + Sync + 'static,
report_ready_callback: impl Fn(ReportInfo) + Send + Sync + 'static,
) -> TelemetryResult<()>
通过注册异步回调来初始化服务。在获取 TelemetryServiceHolder 之后且在进行任何其他互动之前,调用此方法一次。
| 参数 | |
|---|---|
misc_status_callback
|
impl Fn(TelemetryServiceStatus) + Send + Sync +
'static:一个闭包,用于接收和处理来自遥测服务的状态和错误更新
|
report_ready_callback
|
impl Fn(ReportInfo) + Send + Sync + 'static:一个闭包,用于在新的指标报告可供检索时接收和处理通知
|
| 返回 | |
|---|---|
TelemetryResult<()>
|
成功时返回空结果,失败时返回 TelemetryError 实例
|
完成
pub fn finish(&self) -> TelemetryResult<()>
正常关闭服务连接,清除已注册的监听器,并清理关联的资源。在应用终止时调用此方法一次。
| 返回 | |
|---|---|
TelemetryResult<()>
|
成功时返回空结果,失败时返回 TelemetryError 实例
|
指标配置管理
这些异步方法用于管理数据收集配置的定义和状态。
遥测服务以两种状态维护配置:
- 无效:配置已验证并存储在磁盘上,但未用于数据收集。
- 有效:配置正在收集数据,并且其组件(例如触发器、发布者)处于有效状态。
为确保配置在服务重启和设备重新启动后仍能保留,该服务会将配置存储在设备的磁盘上。该服务将所有配置存储在两个基于状态的目录中,并在启动时验证这些配置,并在必要时激活它们。
add_metrics_config
pub async fn add_metrics_config(&self, serialized_config: &[u8]) -> TelemetryResult<String>
向服务添加新的指标配置。配置必须以序列化字节数组的形式提供。添加的配置默认处于非活动状态。
| 参数 | |
|---|---|
serialized_config
|
&[u8]:包含 protobuf 序列化配置数据的字节切片
|
| 返回 | |
|---|---|
TelemetryResult<String>
|
一个结果,成功时包含新添加的配置的 UUID,失败时包含 TelemetryError 实例
|
activate_metrics_config
pub async fn activate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>
激活之前添加(或停用)的指标配置,开始收集数据并生成报告。
| 参数 | |
|---|---|
config_uuid
|
&str:要激活的配置的 UUID |
| 返回 | |
|---|---|
TelemetryResult<String>
|
一个结果,成功时包含已激活配置的 UUID,失败时包含 TelemetryError 实例
|
deactivate_metrics_config
pub async fn deactivate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>
停止针对有效指标配置收集数据和生成报告。配置仍保留在服务中,并且可以稍后重新启用。
| 参数 | |
|---|---|
config_uuid
|
&str:要停用的配置的 UUID |
| 返回 | |
|---|---|
TelemetryResult<String>
|
一个结果,成功时包含已停用的配置的 UUID,失败时包含 TelemetryError 实例
|
remove_metrics_config
pub async fn remove_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>
永久移除指标配置。如果配置处于有效状态,服务会先将其停用。
| 参数 | |
|---|---|
config_uuid
|
&str:要移除的配置的 UUID |
| 返回 | |
|---|---|
TelemetryResult<String>
|
一个结果,成功时包含已移除配置的 UUID,失败时包含 TelemetryError 实例
|
remove_all_metrics_configs
pub async fn remove_all_metrics_configs(&self) -> TelemetryResult<String>
移除所有现有指标配置,停用所有处于有效状态的指标配置。
| 返回 | |
|---|---|
TelemetryResult<String>
|
一个结果,成功时包含状态消息字符串,失败时包含 TelemetryError 实例
|
get_active_metrics_config_uuids
pub async fn get_active_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>
向服务查询处于有效状态的所有配置的 UUID 列表。
| 返回 | |
|---|---|
TelemetryResult<Vec<String>>
|
一个结果,成功时包含有效指标配置的 UUID 字符串向量,失败时包含 TelemetryError 实例
|
get_inactive_metrics_config_uuids
pub async fn get_inactive_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>
向服务查询处于非活跃状态的所有配置的 UUID 列表。
| 返回 | |
|---|---|
TelemetryResult<Vec<String>>
|
一个结果,成功时包含非活跃指标配置的 UUID 字符串向量,失败时包含 TelemetryError 实例
|
指标报告处理和检索
借助这些方法,您可以查询可用的报告并检索收集的报告数据。
get_metrics_report
pub async fn get_metrics_report(&self, report_uuid: &str) -> TelemetryResult<MetricsReport>
检索特定报告 UUID 的完整指标报告数据。您可以使用 report_ready_callback 从通知中获取报告 UUID,也可以通过调用 get_ready_reports_info 来获取。
| 参数 | |
|---|---|
report_uuid
|
&str:要检索的特定报告的 UUID |
| 返回 | |
|---|---|
TelemetryResult<MetricsReport>
|
一个结果,成功时包含反序列化的 MetricsReport protobuf 对象,失败时包含 TelemetryError 实例
|
get_ready_reports_info
pub async fn get_ready_reports_info(&self) -> TelemetryResult<Vec<ReportInfo>>
向 Telemetry 服务查询已完成并可供检索的所有报告的列表。如果错过了回调通知(例如,如果 report_ready_callback 注册较晚),此方法可用于检查报告的状态。
| 返回 | |
|---|---|
TelemetryResult<Vec<ReportInfo>>
|
成功时包含 ReportInfo 对象向量的结果,失败时包含 TelemetryError 实例
|
核心类型、回调和错误处理
libsdv_telemetry_rust_wrapper 使用一组自定义类型与 Telemetry 服务互动、管理异步回调和处理服务错误。
API 响应和错误类型
这些类型由库方法直接返回,用于指示所请求操作的立即成功或失败。
TelemetryResult
大多数方法都会返回 TelemetryResult<T>,它是标准 Result 类型的别名,专门用于服务级错误:
pub type TelemetryResult<T> = Result<T, TelemetryError>;
TelemetryError
TelemetryError 结构体封装了所有失败情况,并提供详细的特定于服务的错误信息:
| 字段 | |
|---|---|
status
|
TelemetryServiceStatusCodes:可枚举的错误代码
|
message
|
String:详细说明错误的描述性消息 |
TelemetryServiceStatusCodes
一个数字枚举,表示 API 调用和内部服务状态的结果。这些代码同时用于 TelemetryError 和 TelemetryServiceStatus。例如:
| 代码 | ||
|---|---|---|
200
|
TELEMETRY_SERVICE_API_CALL_SUCCESS
|
成功 |
402
|
METRICS_CONFIG_PARSE_ERROR
|
未能解析指标配置 |
407
|
REMOVE_METRICS_CONFIG_FAILED
|
未能移除指标配置 |
417
|
METRICS_CONFIG_RUNTIME_EXPRESSION_NODE_EVALUATION_ERROR
|
未能评估指标配置中指定的表达式 |
异步回调类型
注册的监听器(misc_status_callback 和 report_ready_callback)会将这些类型传递给客户端,以提供有关后台进程的更新。
TelemetryServiceStatus
TelemetryServiceStatus 结构体用作 init 的 misc_status_callback 闭包的实参,该闭包在服务初始化期间注册。它提供有关服务健康状况和运行时问题的异步更新,例如与数据源断开连接。
| 字段 | |
|---|---|
id
|
usize:状态事件的唯一标识符 |
code
|
TelemetryServiceStatusCodes:对事件进行分类的状态代码
|
message
|
String:状态的直观易懂的说明 |
details
|
Option<StatusDetails>:提供有关状态的其他上下文的可选结构化数据
|
StatusDetails
此枚举封装了特定的错误上下文。如果 details 存在于 TelemetryServiceStatus 中,则它是以下变体之一:
| 变体 | |
|---|---|
AggregationPublisherErrorDetails
|
汇总数据时出错 |
ServicePublisherErrorDetails
|
尝试连接到服务时出错 |
ConditionalTriggerErrorDetails
|
评估条件触发器的表达式时出错 |
MetricsReportGeneratorErrorDetails
|
生成指标报告时出错 |
ServiceErrorDetails
|
收到来自服务的新消息时出错 |
FileIOErrorDetails
|
发生了文件 I/O 错误 |
每个枚举变体都包含提供更多上下文信息的其他字段。
ReportInfo
ReportInfo 结构体用作 init 的 report_ready_callback 闭包的实参,该闭包在服务初始化期间注册。它包含描述指标报告的标识符:
| 字段 | |
|---|---|
config_uuid
|
String:生成报告的指标配置的 UUID |
report_uuid
|
String:已准备好供检索的指标报告的 UUID |
report_uuid 字段是进一步检索指标报告本身(请参阅 get_metrics_report)的唯一必要字段,而 config_uuid 仅用作有关其来源的附加信息。