Генератор конфигурации метрик (MCG) проверяет конфигурации метрик, сверяя имена сигналов, выполняя проверку типов выражений и определяя типы выходных данных. Для выполнения этих задач MCG необходим доступ к определениям сообщений протокола Protocol Buffer (protobuf) для сигналов транспортных средств.
В системе SDV сигналы и сервисы транспортного средства определяются с помощью языка определения интерфейса сервисов транспортного средства ( VSIDL ). VSIDL использует файлы protobuf для описания сообщений, и эти файлы protobuf составляют основу каталога сигналов.
Чтобы сделать определения сигналов доступными для MCG, необходимо упаковать эти файлы protobuf VSIDL в набор файлов protobuf FileDescriptorSet и загрузить его в сервис MCG. MCG использует термин «Каталог сигналов транспортных средств» для этих загруженных и версионированных наборов определений (по сути, каталог сигналов транспортных средств представляет собой скомпилированную и загруженную форму определений протоколов сообщений из вашего каталога VSIDL).
Что такое каталог автомобильных сигналов?
Каталог сигналов транспортных средств предоставляет MCG определения сигналов для проверки, упакованные в виде FileDescriptorSet в формате protobuf.
В MCG каталоги идентифицируются строкой версии, которую вы назначаете во время загрузки, что позволяет управлять несколькими различными наборами определений сигналов. Например, вы можете поддерживать разные версии каталога для выпусков программного обеспечения ( v1.0 , v1.1 , v2.0 ) или для разных моделей автомобилей или конфигураций оборудования ( suv-my2025 , sedan-my2025 ). Каждая конфигурация метрик использует поле vs_version для ссылки на конкретный каталог, который определяет сигналы, доступные в качестве источников данных, и предоставляет определения сигналов для определения типов и проверки.
Создайте экземпляр FileDescriptorSet.
Как описано в разделе «Определение сообщений и служб RPC» , сигналы транспортных средств определяются как сообщения protobuf в файлах protobuf. Если вы являетесь участником проекта SDV, используйте файлы protobuf из каталога VSIDL вашего проекта для создания экземпляра FileDescriptorSet .
Для создания каталога для MCG объедините ваши файлы protobuf в бинарный файл FileDescriptorSet с помощью protoc . Если все ваши файлы protobuf находятся в одной папке, выполните следующую команду для генерации файла 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
Загрузка и управление каталогами
Загрузка набора определений сигналов в виде каталога позволяет ссылаться на него по имени версии в запросах на настройку метрик.
Добавить или обновить версию каталога
После создания файла каталога vehicle_signals.pb вы можете загрузить его и управлять им, используя конечные точки API MCG по адресу /api/v1/vs/ . Конечная точка для добавления или обновления каталога, POST /api/v1/vs/, требует передачи FileDescriptorSet в виде строки, закодированной в base64, в полезной нагрузке JSON.
Для кодирования vehicle_signals.pb для использования в API используйте команду base64 . Флаг -w 0 отключает перенос строк, так что закодированная строка отображается на одной строке:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
Чтобы загрузить vehicle_signals.pb как новую версию (например, v1.0 ) или обновить существующую версию, отправьте POST запрос с содержимым, закодированным в base64, на конечную точку /api/v1/vs/ с уникальным именем версии.
Тело запроса должно представлять собой JSON-объект, содержащий строку version и строку vehicle_signals закодированную в base64:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
В следующем примере показано, как загрузить vehicle_signals.pb как версию v1.0 с помощью curl . В примере используется printf для формирования полезной нагрузки JSON и передачи её в curl через конвейер, что позволяет избежать необходимости создания JSON-файла, содержащего очень длинную однострочную строку base64:
# 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/"
Список и удаление версий
Вы можете просмотреть все доступные версии каталога или удалить определенную версию:
Список версий: Чтобы просмотреть список идентификаторов всех загруженных версий каталога, отправьте
GETзапрос по адресу/api/v1/vs/. См. GET /api/v1/vs/.Удаление версии: Чтобы удалить каталог, отправьте запрос
DELETEпо адресу/api/v1/vs/{version}, где{version}— это идентификатор, предоставленный при загрузке каталога (например,v1.0). См. DELETE /api/v1/vs/{version}.
Подробную информацию обо всех конечных точках см. в справочнике API.
Используйте каталог в конфигурациях метрик.
При загрузке укажите версию каталога в настройках метрик, используя поле vs_version :
{ "vs_version": "v1.0", ... }
Когда этот JSON-объект отправляется на конечные точки /api/v1/generate_metrics_config или /api/v1/validate_metrics_config , MCG использует определения сигналов из каталога v1.0 для выполнения проверки и определения типов.