Il generatore di configurazione delle metriche (MCG) convalida le configurazioni delle metriche controllando i nomi degli indicatori, eseguendo il controllo dei tipi sulle espressioni e deducendo i tipi di output. Per eseguire queste attività, MCG deve accedere alle definizioni dei messaggi del buffer di protocollo (protobuf) per i segnali del veicolo.
In SDV, i servizi e i segnali del veicolo sono definiti utilizzando il linguaggio di definizione dell'interfaccia di servizio del veicolo (VSIDL). VSIDL utilizza file protobuf per specificare i messaggi e questi file protobuf costituiscono la base di un catalogo di segnali.
Per rendere disponibili le definizioni dei segnali a MCG, devi comprimere questi file protobuf VSIDL
in un protobuf FileDescriptorSet e caricarlo nel servizio
MCG. MCG utilizza il termine catalogo dei segnali del veicolo per questi set di definizioni caricati e
con controllo delle versioni (in sostanza, un catalogo dei segnali del veicolo è la
forma compilata e caricata delle definizioni dei messaggi proto nel catalogo VSIDL).
Che cos'è un catalogo di segnali del veicolo?
Un catalogo dei segnali del veicolo fornisce a MCG le definizioni dei segnali per la convalida,
raggruppate come protobuf FileDescriptorSet.
In MCG, i cataloghi vengono identificati da una stringa di versione che assegni durante
il caricamento, il che ti consente di gestire più insiemi di definizioni di indicatori distinti. Ad esempio, potresti gestire versioni diverse del catalogo per le release software (v1.0, v1.1, v2.0) o per diversi modelli di veicoli o configurazioni hardware (suv-my2025, sedan-my2025). Ogni configurazione delle metriche utilizza il campo vs_version per fare riferimento a un catalogo specifico, che definisce gli indicatori disponibili come origini dati e fornisce definizioni degli indicatori per l'inferenza e la convalida dei tipi.
Crea un'istanza di FileDescriptorSet
Come descritto in Definisci messaggi e servizi RPC, i segnali del veicolo
sono definiti come messaggi protobuf nei file protobuf. Se fai parte di un progetto SDV, utilizza i file protobuf del catalogo VSIDL del progetto per creare un'istanza di FileDescriptorSet.
Per creare un catalogo per MCG, raggruppa i file protobuf in un file binario FileDescriptorSet utilizzando protoc. Se tutti i file protobuf si trovano
in una cartella, esegui questo comando per generare vehicle_signals.pb:
protoc --include_imports --descriptor_set_out=vehicle_signals.pb <var label="path to folder with .proto files">path/to/your/protos</var>/*.proto
Caricare e gestire i cataloghi
Il caricamento del set di definizioni dei segnali come catalogo ti consente di farvi riferimento in base al nome della versione nelle richieste di configurazione delle metriche.
Aggiungere o aggiornare una versione del catalogo
Dopo aver generato il file di catalogo vehicle_signals.pb, puoi caricarlo e
gestirlo utilizzando gli endpoint API MCG in /api/v1/vs/. L'endpoint per
aggiungere o aggiornare un catalogo, POST /api/v1/vs/, richiede che
FileDescriptorSet venga passato come stringa con codifica base64 nel payload JSON.
Per codificare vehicle_signals.pb per l'utilizzo dell'API, utilizza il comando base64. Il flag -w 0
disattiva il ritorno a capo in modo che la stringa codificata venga visualizzata su una sola riga:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
Per caricare vehicle_signals.pb come nuova versione (ad esempio, v1.0) o per aggiornare una versione esistente, invia una richiesta POST con i contenuti codificati in base64 all'endpoint /api/v1/vs/ con un nome di versione univoco.
Il corpo della richiesta deve essere un oggetto JSON contenente la stringa version e la stringa vehicle_signals con codifica base64:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
L'esempio seguente mostra come caricare vehicle_signals.pb come versione v1.0 utilizzando curl. L'esempio utilizza printf per creare il payload JSON e lo invia
a curl, evitando la necessità di creare un file JSON contenente una stringa
base64 a riga singola molto lunga:
# 1. Encode the FileDescriptorSet to a Base64 string
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
# 2. Define catalog version and build JSON payload
VERSION="<var label="catalog version">v1.0</var>"
JSON_PAYLOAD=$(jq -n --arg v "$VERSION" --arg d "$VEHICLE_SIGNALS_BASE64" \
'{version: $v, vehicle_signals: $d}')
# 3. POST the data to the API endpoint
echo "$JSON_PAYLOAD" | curl -H "Content-Type: application/json" --data-binary @- "$SERVICE_URL/api/v1/vs/"
Elenco ed eliminazione delle versioni
Puoi elencare tutte le versioni del catalogo disponibili o eliminare una versione specifica:
Elenco delle versioni: per visualizzare un elenco degli identificatori di tutte le versioni del catalogo caricate, invia una richiesta
GETa/api/v1/vs/. Consulta GET /api/v1/vs/.Elimina una versione: per rimuovere un catalogo, invia una richiesta
DELETEa/api/v1/vs/{version}, dove{version}è l'identificatore fornito al momento del caricamento del catalogo (ad esempio,v1.0). Consulta DELETE /api/v1/vs/{version}.
Per informazioni dettagliate su tutti gli endpoint, consulta il riferimento API.
Utilizzare un catalogo nelle configurazioni delle metriche
Una volta caricata, fai riferimento a una versione del catalogo nelle configurazioni delle metriche utilizzando il campo
vs_version:
{ "vs_version": "v1.0", ... }
Quando questo oggetto JSON viene inviato agli endpoint /api/v1/generate_metrics_config o /api/v1/validate_metrics_config, MCG utilizza le definizioni dei segnali del catalogo v1.0 per eseguire la convalida e l'inferenza del tipo.