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.