Metrik Yapılandırma Oluşturucu (MCG), sinyal adlarını kontrol ederek, ifadelerde tür kontrolü yaparak ve çıkış türlerini çıkararak metrik yapılandırmalarını doğrular. MCG'nin bu görevleri gerçekleştirebilmesi için araç sinyallerine yönelik protokol arabelleği (protobuf) mesaj tanımlarına erişmesi gerekir.
SDV'de araç sinyalleri ve hizmetleri, Araç Hizmeti Arayüzü Tanımlama Dili (VSIDL) kullanılarak tanımlanır. VSIDL, mesajları belirtmek için protobuf dosyalarını kullanır ve bu protobuf dosyaları bir sinyal kataloğunun temelini oluşturur.
Sinyal tanımlarını MCG'ye sunmak için bu VSIDL protobuf dosyalarını bir protobuf FileDescriptorSet olarak paketlemeniz ve MCG hizmetine yüklemeniz gerekir. MCG, bu yüklenen ve sürüm oluşturulan tanım kümeleri için Araç Sinyali Kataloğu terimini kullanır (Araç Sinyali Kataloğu, VSIDL kataloğunuzdaki proto mesaj tanımlarının derlenmiş, yüklenmiş biçimidir).
Araç Sinyali Kataloğu nedir?
Araç Sinyali Kataloğu, doğrulama için MCG'ye protobuf FileDescriptorSet olarak paketlenmiş sinyal tanımları sağlar.
MCG'de kataloglar, yükleme sırasında atadığınız bir sürüm dizesiyle tanımlanır. Bu sayede, birden fazla farklı sinyal tanımı kümesini yönetebilirsiniz. Örneğin, yazılım sürümleri (v1.0, v1.1, v2.0) veya farklı araç modelleri ya da donanım yapılandırmaları (suv-my2025, sedan-my2025) için farklı katalog sürümleri kullanabilirsiniz. Her metrik yapılandırması, belirli bir kataloga referans vermek için vs_version alanını kullanır. Bu katalog, veri kaynağı olarak kullanılabilen sinyalleri tanımlar ve tür çıkarımı ile doğrulama için sinyal tanımları sağlar.
FileDescriptorSet örneği oluşturma
Define messages and RPC services (İletileri ve UPÇ hizmetlerini tanımlama) bölümünde açıklandığı gibi, araç sinyalleri protobuf dosyalarındaki protobuf iletileri olarak tanımlanır. Bir SDV projesinin parçasıysanız FileDescriptorSet örneği oluşturmak için projenizin VSIDL kataloğundaki protobuf dosyalarını kullanın.
ÇMG için katalog oluşturmak üzere protobuf dosyalarınızı protoc kullanarak FileDescriptorSet ikili program dosyası halinde paketleyin. Tüm protobuf dosyalarınız tek bir klasördeyse vehicle_signals.pb oluşturmak için aşağıdaki komutu çalıştırın:
protoc --include_imports --descriptor_set_out=vehicle_signals.pb <var label="path to folder with .proto files">path/to/your/protos</var>/*.proto
Katalog yükleme ve yönetme
Sinyal tanımı kümenizi katalog olarak yüklediğinizde, metrik yapılandırma isteklerinde sürüm adına göre başvurabilirsiniz.
Katalog sürümü ekleme veya güncelleme
vehicle_signals.pb katalog dosyasını oluşturduktan sonra, /api/v1/vs/ bölümündeki MCG API uç noktalarını kullanarak dosyayı yükleyip yönetebilirsiniz. Katalog ekleme veya güncelleme uç noktası (POST /api/v1/vs/), FileDescriptorSet öğesinin JSON yükünde base64 kodlu dize olarak iletilmesini gerektirir.
vehicle_signals.pb karakterini API kullanımına uygun şekilde kodlamak için base64 komutunu kullanın. -w 0
işareti, kodlanmış dizenin tek bir satırda görünmesi için satır sarmayı devre dışı bırakır:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
vehicle_signals.pb öğesini yeni bir sürüm olarak yüklemek (ör. v1.0) veya mevcut bir sürümü güncellemek için, base64 kodlu içerikle birlikte POST isteğini benzersiz bir sürüm adıyla /api/v1/vs/ uç noktasına gönderin.
İstek gövdesi, version dizesini ve base64 kodlu vehicle_signals dizesini içeren bir JSON nesnesi olmalıdır:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
Aşağıdaki örnekte, curl kullanılarak vehicle_signals.pb öğesinin v1.0 sürümü olarak nasıl yükleneceği gösterilmektedir. Örnekte, JSON yükünü oluşturmak için printf kullanılır ve bu yük curl'ye yönlendirilir. Bu sayede, çok uzun tek satırlık bir base64 dizesi içeren JSON dosyası oluşturmaya gerek kalmaz:
# 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/"
Sürümleri listeleme ve silme
Mevcut tüm katalog sürümlerini listeleyebilir veya belirli bir sürümü silebilirsiniz:
Liste sürümleri: Yüklenen tüm katalog sürümlerinin tanımlayıcılarının listesini görmek için
GETadresine/api/v1/vs/isteği gönderin. GET /api/v1/vs/ bölümüne bakın.Bir sürümü silme: Bir kataloğu kaldırmak için
DELETEisteğini/api/v1/vs/{version}adresine gönderin. Burada{version}, katalog yüklendiğinde sağlanan tanımlayıcıdır (örneğin,v1.0). DELETE /api/v1/vs/{version} bölümüne bakın.
Tüm uç noktalarla ilgili ayrıntılı bilgi için API Referansı'na bakın.
Metrik yapılandırmalarında katalog kullanma
Yüklendikten sonra, vs_version alanını kullanarak metrik yapılandırmalarında bir katalog sürümüne referans verin:
{ "vs_version": "v1.0", ... }
Bu JSON nesnesi /api/v1/generate_metrics_config veya /api/v1/validate_metrics_config uç noktalarına gönderildiğinde MCG, doğrulama ve tür çıkarımı gerçekleştirmek için v1.0 kataloğundaki sinyal tanımlarını kullanır.