Riferimento API della libreria client di telemetria Rust

Questa pagina descrive i tipi, i metodi e la gestione degli errori nella libreria libsdv_telemetry_rust_wrapper.

Interfaccia TelemetryServiceHolder

L'interfaccia principale per i client è la struttura TelemetryServiceHolder. Questa interfaccia fornisce l'insieme completo di metodi per la gestione della connessione al servizio, delle configurazioni delle metriche e dei report sui dati.

Gestione del ciclo di vita dei servizi

Questi metodi stabiliscono e terminano la connessione con il servizio di telemetria sottostante.

get

pub fn get() -> TelemetryResult<TelemetryServiceHolder>

Un metodo statico che recupera un handle thread-safe per il servizio di telemetria. Si tratta di una chiamata di blocco che attende che il servizio di binder di telemetria sia pronto. Il servizio di telemetria supporta una sola istanza di TelemetryServiceHolder. Chiamare questo metodo più di una volta causa un comportamento indefinito o imprevisto.

TelemetryServiceHolder implementa i tratti Send e Sync, il che significa che può essere condiviso in modo sicuro tra i thread, ad esempio racchiudendolo in un'istanza di Arc. La maggior parte dei metodi di TelemetryServiceHolder sono async e possono essere utilizzati contemporaneamente.

Resi
TelemetryResult<TelemetryServiceHolder> Un risultato contenente l'handle del servizio o TelemetryError istanza se il servizio non può essere ottenuto

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<()>

Inizializza il servizio registrando i callback asincroni. Chiama questo metodo una volta dopo aver ottenuto TelemetryServiceHolder e prima di qualsiasi altra interazione.

Parametri
misc_status_callback impl Fn(TelemetryServiceStatus) + Send + Sync + 'static: una chiusura che riceve ed elabora gli aggiornamenti di stato e di errore dal servizio di telemetria
report_ready_callback impl Fn(ReportInfo) + Send + Sync + 'static: una chiusura che riceve ed elabora le notifiche quando un nuovo report sulle metriche è pronto per il recupero
Resi
TelemetryResult<()> Un risultato vuoto in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

fine

pub fn finish(&self) -> TelemetryResult<()>

Chiude normalmente la connessione al servizio, cancella i listener registrati e pulisce le risorse associate. Chiama questo metodo una volta quando l'app termina.

Resi
TelemetryResult<()> Un risultato vuoto in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

Gestione della configurazione delle metriche

Questi metodi asincroni gestiscono la definizione e lo stato delle configurazioni di raccolta dei dati.

Il servizio di telemetria gestisce le configurazioni in due stati:

  • Non attivo:la configurazione viene convalidata e archiviata su disco, ma non viene utilizzata per la raccolta dei dati.
  • Attiva:la configurazione raccoglie dati e i suoi componenti (ad esempio trigger e publisher) sono attivi.

Per garantire che le configurazioni vengano mantenute dopo i riavvii del servizio e i riavvii del dispositivo, il servizio le memorizza sul disco del dispositivo. Il servizio memorizza tutte le configurazioni in due directory basate sullo stato, con la convalida e, se necessario, l'attivazione all'avvio.

add_metrics_config

pub async fn add_metrics_config(&self, serialized_config: &[u8]) -> TelemetryResult<String>

Aggiunge una nuova configurazione delle metriche al servizio. La configurazione deve essere fornita come array di byte serializzato. La configurazione aggiunta è inattiva per impostazione predefinita.

Parametri
serialized_config &[u8]: una sezione di byte contenente i dati di configurazione serializzati in protobuf
Resi
TelemetryResult<String> Un risultato contenente l'UUID della configurazione appena aggiunta in caso di esito positivo oppure TelemetryError istanza in caso di esito negativo

activate_metrics_config

pub async fn activate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Attiva una configurazione delle metriche aggiunta (o disattivata) in precedenza, avviando la raccolta dei dati e la generazione di report.

Parametri
config_uuid &str: L'UUID della configurazione da attivare
Resi
TelemetryResult<String> Un risultato contenente l'UUID della configurazione attivata in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

deactivate_metrics_config

pub async fn deactivate_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Interrompe la raccolta dei dati e la generazione di report per una configurazione delle metriche attiva. La configurazione rimane nel servizio e può essere riattivata in un secondo momento.

Parametri
config_uuid &str: l'UUID della configurazione da disattivare
Resi
TelemetryResult<String> Un risultato contenente l'UUID della configurazione disattivata in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

remove_metrics_config

pub async fn remove_metrics_config(&self, config_uuid: &str) -> TelemetryResult<String>

Rimuove definitivamente una configurazione delle metriche. Se la configurazione è attiva, il servizio la disattiva prima.

Parametri
config_uuid &str: l'UUID della configurazione da rimuovere
Resi
TelemetryResult<String> Un risultato contenente l'UUID della configurazione rimossa in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

remove_all_metrics_configs

pub async fn remove_all_metrics_configs(&self) -> TelemetryResult<String>

Rimuove tutte le configurazioni delle metriche esistenti, disattivando quelle attive.

Resi
TelemetryResult<String> Un risultato contenente una stringa di messaggio di stato in caso di esito positivo o un'istanza TelemetryError in caso di esito negativo

get_active_metrics_config_uuids

pub async fn get_active_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>

Esegue una query sul servizio per un elenco di UUID per tutte le configurazioni nello stato attivo.

Resi
TelemetryResult<Vec<String>> Un risultato contenente un vettore di stringhe UUID per le configurazioni delle metriche attive in caso di esito positivo, o un'istanza TelemetryError in caso di esito negativo

get_inactive_metrics_config_uuids

pub async fn get_inactive_metrics_config_uuids(&self) -> TelemetryResult<Vec<String>>

Esegue una query sul servizio per un elenco di UUID per tutte le configurazioni nello stato inattivo.

Resi
TelemetryResult<Vec<String>> Un risultato contenente un vettore di stringhe UUID per le configurazioni delle metriche inattive in caso di esito positivo, o un'istanza TelemetryError in caso di esito negativo

Gestione e recupero dei report sulle metriche

Questi metodi ti consentono di eseguire query per i report disponibili e recuperare i dati dei report raccolti.

get_metrics_report

pub async fn get_metrics_report(&self, report_uuid: &str) -> TelemetryResult<MetricsReport>

Recupera i dati completi del report sulle metriche per un UUID report specifico. Puoi ottenere l'UUID del report da una notifica utilizzando report_ready_callback o chiamando get_ready_reports_info.

Parametri
report_uuid &str: l'UUID del report specifico da recuperare
Resi
TelemetryResult<MetricsReport> Un risultato contenente l'oggetto protobuf MetricsReport deserializzato in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

get_ready_reports_info

pub async fn get_ready_reports_info(&self) -> TelemetryResult<Vec<ReportInfo>>

Esegue una query sul servizio di telemetria per un elenco di tutti i report completati e pronti per il recupero. Ciò è utile per controllare lo stato dei report se una notifica di callback non è stata ricevuta (ad esempio, se report_ready_callback è stato registrato in ritardo).

Resi
TelemetryResult<Vec<ReportInfo>> Un risultato contenente il vettore di oggetti ReportInfo in caso di esito positivo o l'istanza TelemetryError in caso di esito negativo

Tipi principali, callback e gestione degli errori

libsdv_telemetry_rust_wrapper utilizza un insieme di tipi personalizzati per interagire con il servizio di telemetria, gestire i callback asincroni e gestire gli errori del servizio.

Tipi di risposta ed errore dell'API

Questi tipi vengono restituiti direttamente dai metodi della libreria per indicare l'esito positivo o negativo immediato dell'operazione richiesta.

TelemetryResult

La maggior parte dei metodi restituisce un TelemetryResult<T>, che è un alias per il tipo Result standard, specializzato per gli errori a livello di servizio:

pub type TelemetryResult<T> = Result<T, TelemetryError>;

TelemetryError

La struct TelemetryError incapsula tutti gli errori e fornisce informazioni dettagliate sugli errori specifici del servizio:

Campi
status TelemetryServiceStatusCodes: Un codice di errore enumerabile
message String: un messaggio descrittivo che illustra in dettaglio l'errore

TelemetryServiceStatusCodes

Un'enumerazione numerica che rappresenta il risultato delle chiamate API e degli stati del servizio interno. Questi codici vengono utilizzati sia in TelemetryError che in TelemetryServiceStatus. Ad esempio:

Codici
200 TELEMETRY_SERVICE_API_CALL_SUCCESS Operazione riuscita
402 METRICS_CONFIG_PARSE_ERROR Impossibile analizzare la configurazione delle metriche
407 REMOVE_METRICS_CONFIG_FAILED Impossibile rimuovere la configurazione delle metriche
417 METRICS_CONFIG_RUNTIME_EXPRESSION_NODE_EVALUATION_ERROR Impossibile valutare l'espressione specificata nella configurazione delle metriche

Tipi di callback asincroni

I listener registrati (misc_status_callback e report_ready_callback) passano questi tipi al client per fornire aggiornamenti sui processi in background.

TelemetryServiceStatus

La struct TelemetryServiceStatus funge da argomento per la chiusura misc_status_callback di init, che viene registrata durante l'inizializzazione del servizio. Fornisce aggiornamenti asincroni sullo stato e sui problemi di runtime del servizio, ad esempio la disconnessione da un'origine dati.

Campi
id usize: un identificatore univoco per l'evento di stato
code TelemetryServiceStatusCodes: Codice di stato che classifica l'evento
message String: una descrizione dello stato leggibile da una persona
details Option<StatusDetails>: Dati strutturati facoltativi che forniscono un contesto aggiuntivo sullo stato

statusDetails

Questo enum racchiude contesti di errore specifici. Se details è presente in TelemetryServiceStatus, è una delle seguenti varianti:

Varianti
AggregationPublisherErrorDetails Si è verificato un errore durante l'aggregazione dei dati
ServicePublisherErrorDetails Si è verificato un errore durante il tentativo di connessione a un servizio
ConditionalTriggerErrorDetails Si è verificato un errore durante la valutazione dell'espressione di un trigger condizionale
MetricsReportGeneratorErrorDetails Si è verificato un errore durante la generazione di un report sulle metriche
ServiceErrorDetails Si è verificato un errore durante la ricezione di un nuovo messaggio da un servizio
FileIOErrorDetails Si è verificato un errore I/O del file

Ogni variante dell'enumerazione contiene campi aggiuntivi che forniscono ancora più contesto.

ReportInfo

La struct ReportInfo funge da argomento per la chiusura report_ready_callback di init, che viene registrata durante l'inizializzazione del servizio. Contiene gli identificatori che descrivono un report sulle metriche:

Campi
config_uuid String: L'UUID della configurazione delle metriche che ha generato il report
report_uuid String: L'UUID del report sulle metriche pronto per il recupero

Il campo report_uuid è l'unico necessario per il recupero successivo del report sulle metriche stesso (vedi get_metrics_report), mentre config_uuid funge solo da informazione aggiuntiva sulla sua origine.