本頁說明 libsdv_telemetry_rust_wrapper 程式庫中的型別、方法和錯誤處理方式。
TelemetryServiceHolder 介面
用戶端的主要介面是 TelemetryServiceHolder 結構體。這個介面提供全套方法,可管理服務連線、指標設定和資料報表。
服務生命週期管理
這些方法會建立及終止與基礎遙測服務的連線。
get
pub fn get() -> TelemetryResult<TelemetryServiceHolder>
這個靜態方法會擷取 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 或呼叫 get_ready_reports_info,從通知取得報表 UUID。
| 參數 | |
|---|---|
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。例如:
| Codes | ||
|---|---|---|
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:狀態事件的專屬 ID |
code
|
TelemetryServiceStatusCodes:將事件分類的狀態碼
|
message
|
String:狀態的說明,方便使用者閱讀 |
details
|
Option<StatusDetails>:選用結構化資料,可提供狀態的其他背景資訊 |
StatusDetails
這個列舉會包裝特定錯誤情境。如果 details 出現在 TelemetryServiceStatus 中,則為下列其中一個變數:
| 版本 | |
|---|---|
AggregationPublisherErrorDetails
|
彙整資料時發生錯誤 |
ServicePublisherErrorDetails
|
嘗試連線至服務時發生錯誤 |
ConditionalTriggerErrorDetails
|
評估條件式觸發條件的運算式時發生錯誤 |
MetricsReportGeneratorErrorDetails
|
產生指標報表時發生錯誤 |
ServiceErrorDetails
|
接收服務的新訊息時發生錯誤 |
FileIOErrorDetails
|
發生檔案 I/O 錯誤 |
每個列舉變體都包含額外欄位,提供更多背景資訊。
ReportInfo
ReportInfo 結構體會做為 report_ready_callback 閉包的引數,而 init 則會在服務初始化期間註冊。其中包含描述指標報表的 ID:
| 欄位 | |
|---|---|
config_uuid
|
String:產生報表的指標設定 UUID |
report_uuid
|
String:可供擷取的指標報表 UUID |
如要進一步擷取指標報表本身 (請參閱 get_metrics_report),唯一必要的欄位是 report_uuid,而 config_uuid 僅做為來源的額外資訊。