Rust Telemetry 客户端库 API 参考文档

本页面介绍了 libsdv_telemetry_rust_wrapper 库中的类型、方法和错误处理。

TelemetryServiceHolder 接口

客户端的主要接口是 TelemetryServiceHolder 结构体。此接口提供了一整套用于管理服务连接、指标配置和数据报告的方法。

服务生命周期管理

这些方法用于建立和终止与底层遥测服务的连接。

get

pub fn get() -> TelemetryResult<TelemetryServiceHolder>

一种静态方法,用于检索 Telemetry 服务的线程安全句柄。这是一个阻塞调用,会一直等待,直到遥测绑定器服务准备就绪。Telemetry 服务仅支持 TelemetryServiceHolder 的单个实例。多次调用此方法会导致未定义或意外的行为。

TelemetryServiceHolder 实现 SendSync 特征,这意味着它可以安全地跨线程共享,例如通过将其封装在 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 调用和内部服务状态的结果。这些代码同时用于 TelemetryErrorTelemetryServiceStatus。例如:

代码
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_callbackreport_ready_callback)会将这些类型传递给客户端,以提供有关后台进程的更新。

TelemetryServiceStatus

TelemetryServiceStatus 结构体用作 initmisc_status_callback 闭包的实参,该闭包在服务初始化期间注册。它提供有关服务健康状况和运行时问题的异步更新,例如与数据源断开连接。

字段
id usize:状态事件的唯一标识符
code TelemetryServiceStatusCodes:对事件进行分类的状态代码
message String:状态的直观易懂的说明
details Option<StatusDetails>:提供有关状态的其他上下文的可选结构化数据

StatusDetails

此枚举封装了特定的错误上下文。如果 details 存在于 TelemetryServiceStatus 中,则它是以下变体之一:

变体
AggregationPublisherErrorDetails 汇总数据时出错
ServicePublisherErrorDetails 尝试连接到服务时出错
ConditionalTriggerErrorDetails 评估条件触发器的表达式时出错
MetricsReportGeneratorErrorDetails 生成指标报告时出错
ServiceErrorDetails 收到来自服务的新消息时出错
FileIOErrorDetails 发生了文件 I/O 错误

每个枚举变体都包含提供更多上下文信息的其他字段。

ReportInfo

ReportInfo 结构体用作 initreport_ready_callback 闭包的实参,该闭包在服务初始化期间注册。它包含描述指标报告的标识符:

字段
config_uuid String:生成报告的指标配置的 UUID
report_uuid String:已准备好供检索的指标报告的 UUID

report_uuid 字段是进一步检索指标报告本身(请参阅 get_metrics_report)的唯一必要字段,而 config_uuid 仅用作有关其来源的附加信息。