O Metrics Configuration Generator (MCG) valida as configurações de métricas verificando nomes de indicadores, realizando a verificação de tipo em expressões e inferindo tipos de saída. O MCG precisa de acesso às definições de mensagens do buffer de protocolo (protobuf) para que os indicadores do veículo realizem essas tarefas.
No SDV, os sinais e serviços do veículo são definidos usando a linguagem de definição de interface de serviço do veículo (VSIDL, na sigla em inglês). A VSIDL usa arquivos protobuf para especificar mensagens, e esses arquivos formam a base de um catálogo de indicadores.
Para disponibilizar as definições de sinal para o MCG, é necessário empacotar esses arquivos protobuf
VSIDL em um FileDescriptorSet protobuf e fazer upload dele para o serviço
MCG. O MCG usa o termo Catálogo de Sinais de Veículos para esses conjuntos de definições
enviados e com controle de versões (essencialmente, tornando um Catálogo de Sinais de Veículos o
formulário compilado e enviado das definições de mensagens proto no seu catálogo VSIDL).
O que é um catálogo de indicadores de veículos?
Um catálogo de indicadores de veículos fornece ao MCG definições de indicadores para validação,
empacotadas como um protobuf FileDescriptorSet.
No MCG, os catálogos são identificados por uma string de versão que você atribui durante o upload, o que permite gerenciar vários conjuntos distintos de definição de indicadores. Por
exemplo, é possível manter diferentes versões de catálogo para versões de software
(v1.0, v1.1, v2.0) ou para diferentes modelos de veículos ou configurações de
hardware (suv-my2025, sedan-my2025). Cada configuração de métricas usa
o campo vs_version para referenciar um catálogo específico, que define os
indicadores disponíveis como fontes de dados e fornece definições de indicadores para
inferência e validação de tipo.
Criar uma instância de FileDescriptorSet
Conforme descrito em Definir mensagens e serviços RPC, os indicadores do veículo
são definidos como mensagens protobuf em arquivos protobuf. Se você faz parte de um projeto de SDV, use os arquivos protobuf do catálogo VSIDL do projeto para criar uma
instância de FileDescriptorSet.
Para criar um catálogo para o MCG, agrupe os arquivos protobuf em um arquivo binário FileDescriptorSet usando protoc. Se todos os arquivos protobuf estiverem
em uma pasta, execute o seguinte comando para gerar vehicle_signals.pb:
protoc --include_imports --descriptor_set_out=vehicle_signals.pb path/to/your/protos/*.proto
Fazer upload e gerenciar catálogos
Ao fazer upload do conjunto de definições de indicador como um catálogo, é possível referenciá-lo pelo nome da versão nas solicitações de configuração de métricas.
Adicionar ou atualizar uma versão do catálogo
Depois de gerar o arquivo de catálogo vehicle_signals.pb, é possível fazer upload dele e
gerenciá-lo usando os endpoints de API MCG em /api/v2/vs/. O endpoint para adicionar ou atualizar um catálogo, POST /api/v2/vs/, exige que o FileDescriptorSet seja transmitido como uma string codificada em base64 no payload JSON.
Para codificar vehicle_signals.pb para uso da API, use o comando base64. A flag -w 0
desativa a quebra de linha para que a string codificada apareça em uma única linha:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
Para fazer upload de vehicle_signals.pb como uma nova versão (por exemplo, v1.0) ou para
atualizar uma versão atual, envie uma solicitação POST com o conteúdo codificado em base64
para o endpoint /api/v2/vs/ com um nome de versão exclusivo.
O corpo da solicitação precisa ser um objeto JSON que contenha a string version e a
string vehicle_signals codificada em base64:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
O exemplo a seguir mostra como fazer upload de vehicle_signals.pb como versão v1.0
usando curl. O exemplo usa printf para construir o payload JSON e o canaliza
para curl, o que evita a necessidade de criar um arquivo JSON contendo uma string base64 de linha única
muito longa:
# 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="v1.0" 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/v2/vs/"
Listar e excluir versões
É possível listar todas as versões disponíveis do catálogo ou excluir uma versão específica:
Listar versões: para ver uma lista de identificadores de todas as versões de catálogo enviadas, envie uma solicitação
GETpara/api/v2/vs/. Consulte GET /api/v2/vs/.Excluir uma versão: para remover um catálogo, envie uma solicitação
DELETEpara/api/v2/vs/{version}, em que{version}é o identificador fornecido quando o catálogo foi enviado (por exemplo,v1.0). Consulte DELETE /api/v2/vs/{version}.
Para detalhes completos sobre todos os endpoints, consulte a Referência da API.
Usar um catálogo em configurações de métricas
Depois de fazer o upload, use o campo vs_version para referenciar uma versão do catálogo nas configurações de métricas:
{ "vs_version": "v1.0", ... }
Quando esse objeto JSON é enviado para os endpoints /api/v2/generate_metrics_config ou
/api/v2/validate_metrics_config, o MCG usa as definições de sinal
do catálogo v1.0 para realizar a validação e a inferência de tipo.