মেট্রিক্স কনফিগারেশন জেনারেটর (MCG) সিগন্যালের নাম পরীক্ষা করে, এক্সপ্রেশনের টাইপ চেকিং করে এবং আউটপুটের ধরন অনুমান করার মাধ্যমে মেট্রিক্স কনফিগারেশনগুলো যাচাই করে। এই কাজগুলো করার জন্য MCG-এর যানবাহনের সিগন্যালের প্রোটোকল বাফার (প্রোটোবাফ) মেসেজ ডেফিনিশনে অ্যাক্সেস প্রয়োজন।
SDV-তে, ভেহিকল সিগন্যাল এবং সার্ভিসগুলো ভেহিকল সার্ভিস ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ ( VSIDL ) ব্যবহার করে সংজ্ঞায়িত করা হয়। VSIDL মেসেজ নির্দিষ্ট করার জন্য প্রোটোবাফ ফাইল ব্যবহার করে, এবং এই প্রোটোবাফ ফাইলগুলোই একটি সিগন্যাল ক্যাটালগের ভিত্তি তৈরি করে।
MCG-এর কাছে সিগন্যাল ডেফিনিশনগুলো উপলব্ধ করার জন্য, আপনাকে অবশ্যই এই VSIDL প্রোটোবাফ ফাইলগুলোকে একটি প্রোটোবাফ FileDescriptorSet এ প্যাকেজ করে MCG সার্ভিসে আপলোড করতে হবে। MCG এই আপলোড করা এবং ভার্সনযুক্ত ডেফিনিশন সেটগুলোর জন্য 'ভেহিকেল সিগন্যাল ক্যাটালগ' শব্দটি ব্যবহার করে (মূলত, এটি আপনার VSIDL ক্যাটালগে থাকা প্রোটো মেসেজ ডেফিনিশনগুলোর কম্পাইল করা ও আপলোড করা রূপকেই ভেহিকেল সিগন্যাল ক্যাটালগ হিসেবে তৈরি করে)।
যানবাহন সংকেত ক্যাটালগ বলতে কী বোঝায়?
একটি ভেহিকেল সিগন্যাল ক্যাটালগ, ভ্যালিডেশনের জন্য MCG-কে সিগন্যাল ডেফিনিশন সরবরাহ করে, যা একটি প্রোটোবাফ FileDescriptorSet ) হিসেবে প্যাকেজ করা থাকে।
MCG-তে, ক্যাটালগগুলিকে একটি ভার্সন স্ট্রিং দ্বারা চিহ্নিত করা হয়, যা আপনি আপলোডের সময় নির্ধারণ করেন এবং যা আপনাকে একাধিক স্বতন্ত্র সিগন্যাল ডেফিনিশন সেট পরিচালনা করতে দেয়। উদাহরণস্বরূপ, আপনি সফটওয়্যার রিলিজের জন্য ( v1.0 , v1.1 , v2.0 ), অথবা বিভিন্ন গাড়ির মডেল বা হার্ডওয়্যার কনফিগারেশনের জন্য ( suv-my2025 , sedan-my2025 ) ভিন্ন ভিন্ন ক্যাটালগ ভার্সন বজায় রাখতে পারেন। প্রতিটি মেট্রিক্স কনফিগারেশন একটি নির্দিষ্ট ক্যাটালগকে রেফারেন্স করার জন্য vs_version ফিল্ডটি ব্যবহার করে, যা ডেটা সোর্স হিসাবে উপলব্ধ সিগন্যালগুলিকে সংজ্ঞায়িত করে এবং টাইপ ইনফারেন্স ও ভ্যালিডেশনের জন্য সিগন্যাল ডেফিনিশন সরবরাহ করে।
FileDescriptorSet-এর একটি ইনস্ট্যান্স তৈরি করুন
"মেসেজ এবং আরপিসি পরিষেবা সংজ্ঞায়িত করুন" অংশে যেমন বর্ণনা করা হয়েছে, গাড়ির সংকেতগুলি প্রোটোবাফ ফাইলে প্রোটোবাফ মেসেজ হিসাবে সংজ্ঞায়িত করা হয়। আপনি যদি একটি এসডিভি প্রকল্পের অংশ হন, তাহলে FileDescriptorSet এর একটি ইনস্ট্যান্স তৈরি করতে আপনার প্রকল্পের VSIDL ক্যাটালগ থেকে প্রোটোবাফ ফাইলগুলি ব্যবহার করুন।
MCG-এর জন্য একটি ক্যাটালগ তৈরি করতে, protoc ব্যবহার করে আপনার প্রোটোবাফ ফাইলগুলিকে একটি FileDescriptorSet বাইনারি ফাইলে বান্ডল করুন। যদি আপনার সমস্ত প্রোটোবাফ ফাইল একটি ফোল্ডারে থাকে, তাহলে 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/v1/vs/ এর অধীনে থাকা MCG API এন্ডপয়েন্টগুলো ব্যবহার করে এটি আপলোড এবং পরিচালনা করতে পারেন। ক্যাটালগ যোগ বা আপডেট করার এন্ডপয়েন্ট, POST /api/v1/vs/, এর জন্য JSON পেলোডে FileDescriptorSet একটি base64-এনকোডেড স্ট্রিং হিসেবে পাস করতে হয়।
API-তে ব্যবহারের জন্য vehicle_signals.pb এনকোড করতে base64 কমান্ডটি ব্যবহার করুন। -w 0 ফ্ল্যাগটি লাইন র্যাপিং নিষ্ক্রিয় করে, ফলে এনকোড করা স্ট্রিংটি একটি লাইনে প্রদর্শিত হয়:
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)
vehicle_signals.pb একটি নতুন সংস্করণ (যেমন, v1.0 ) হিসেবে আপলোড করতে বা বিদ্যমান সংস্করণ আপডেট করতে, একটি অনন্য সংস্করণের নামসহ base64-এনকোডেড কন্টেন্টযুক্ত একটি POST অনুরোধ /api/v1/vs/ এন্ডপয়েন্টে পাঠান।
অনুরোধের বডি অবশ্যই একটি JSON অবজেক্ট হতে হবে, যার মধ্যে version স্ট্রিং এবং বেস৬৪-এনকোডেড vehicle_signals স্ট্রিং থাকবে:
{
"version": "v1.0",
"vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে curl ব্যবহার করে vehicle_signals.pb v1.0 সংস্করণ হিসেবে আপলোড করতে হয়। উদাহরণটিতে JSON পেলোড তৈরি করার জন্য printf ব্যবহার করা হয়েছে এবং এটিকে curl এ পাইপ করা হয়েছে, যার ফলে একটি খুব দীর্ঘ এক-লাইনের base64 স্ট্রিং সম্বলিত JSON ফাইল তৈরি করার প্রয়োজন এড়ানো যায়:
# 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/"
সংস্করণগুলি তালিকাভুক্ত করুন এবং মুছুন
আপনি উপলব্ধ সমস্ত ক্যাটালগ সংস্করণ তালিকাভুক্ত করতে পারেন অথবা একটি নির্দিষ্ট সংস্করণ মুছে ফেলতে পারেন:
সংস্করণসমূহের তালিকা: আপলোড করা সমস্ত ক্যাটালগ সংস্করণের শনাক্তকারীগুলির তালিকা দেখতে,
/api/v1/vs/-এ একটিGETঅনুরোধ পাঠান। GET /api/v1/vs/ দেখুন।ভার্সন মুছুন: একটি ক্যাটালগ সরাতে,
/api/v1/vs/{version}-এ একটিDELETEঅনুরোধ পাঠান, যেখানে{version}হলো ক্যাটালগ আপলোড করার সময় প্রদত্ত শনাক্তকারী (উদাহরণস্বরূপ,v1.0)। DELETE /api/v1/vs/{version} দেখুন।
সমস্ত এন্ডপয়েন্টের পূর্ণাঙ্গ বিবরণের জন্য এপিআই রেফারেন্স দেখুন।
মেট্রিক্স কনফিগারেশনে একটি ক্যাটালগ ব্যবহার করুন
আপলোড করার সময়, মেট্রিক্স কনফিগারেশনে vs_version ফিল্ডটি ব্যবহার করে একটি ক্যাটালগ সংস্করণ উল্লেখ করুন:
{ "vs_version": "v1.0", ... }
যখন এই JSON অবজেক্টটি /api/v1/generate_metrics_config অথবা /api/v1/validate_metrics_config এন্ডপয়েন্টগুলিতে পাঠানো হয়, তখন MCG ভ্যালিডেশন এবং টাইপ ইনফারেন্স সম্পাদন করার জন্য v1.0 ক্যাটালগ থেকে সিগন্যাল ডেফিনিশনগুলি ব্যবহার করে।