ব্যবহারকারীর নির্দেশিকা

আপনি প্রদত্ত ওয়েব ডেমো ব্যবহার করে অথবা সরাসরি REST API কল করে সিমুলেশন চালাতে পারেন।

ইনপুট এবং আউটপুট

ইনপুট এবং আউটপুট ফাইলগুলো টেরাফর্ম সেটআপের ক্লাউড স্টোরেজ বাকেট ব্যবহার করে।

ইনপুট ডিরেক্টরিতে অবশ্যই metrics_config.zip এবং publisher_config.zip ফাইল দুটি থাকতে হবে। আপনি প্রয়োজন অনুযায়ী এর পাথ নির্ধারণ করতে পারেন।

আউটপুট বাকেটটিতে একটি simulations ডিরেক্টরি থাকে, যেখানে প্রতিটি সিমুলেশন তার আইডি দ্বারা সংরক্ষিত থাকে। প্রতিটি সিমুলেশন ডিরেক্টরিতে কপি করা ইনপুট ফাইলসহ একটি ইনপুট ফোল্ডার এবং একটি আউটপুট ফোল্ডার থাকে। আউটপুট ফোল্ডারটিতে বাগরিপোর্ট, লগক্যাট ফাইল এবং তৈরি করা সিমুলেটর ফাইলগুলো থাকে।

ওয়েব ডেমো ব্যবহার করুন

প্ল্যাটফর্মটিতে প্রদর্শনের উদ্দেশ্যে একটি ফ্লাটার-ভিত্তিক ওয়েব অ্যাপ্লিকেশন অন্তর্ভুক্ত রয়েছে, যা আপনাকে সিমুলেশন দেখতে, তৈরি করতে এবং পরিচালনা করতে দেয়। আপনাকে আপনার প্রয়োজন অনুযায়ী নিজস্ব ইউজার ইন্টারফেস তৈরি করতে উৎসাহিত করা হচ্ছে।

ডেমো অ্যাপটি অ্যাপ ইঞ্জিনে ডেপ্লয় করা আছে এবং এর জন্য আপনাকে একটি গুগল অ্যাকাউন্ট দিয়ে সাইন ইন করতে হবে। এটি আপনার গুগল ক্লাউড প্রজেক্টে কনফিগার করা একটি OAuth 2.0 ক্লায়েন্ট আইডি ব্যবহার করে সুরক্ষিত থাকে। ডেপ্লয় করা ক্লাউড ফাংশনগুলো ইনভোক করার জন্য সাইন-ইন করা অ্যাকাউন্টটির অবশ্যই IAM পারমিশন থাকতে হবে। ইউজার অ্যাকাউন্টগুলোতে প্রয়োজনীয় পারমিশন, যেমন ক্লাউড ফাংশনস ইনভোকার রোল ( roles/cloudfunctions.invoker ), প্রদান করার নির্দেশাবলীর জন্য “Authorize access with IAM” দেখুন।

ব্যবহারকারীর কর্মপ্রবাহ

  1. OAuth 2.0 প্রক্রিয়ার মাধ্যমে প্রমাণীকৃত আপনার Google অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
  2. মূল পৃষ্ঠায় সিমুলেশনগুলো দেখুন, যেখানে ফায়ারস্টোর ডাটাবেস থেকে কোয়েরি করে সমস্ত সিমুলেশনের তালিকা পাওয়া যায়, যেটিতে এক্সিকিউশনের সমস্ত তথ্য সংরক্ষিত থাকে।
  3. নিচের-ডান কোণায় থাকা + অ্যাকশন বোতামে ক্লিক করে একটি নতুন সিমুলেশন শিডিউল করার জন্য ফর্মটিতে যান। আপনাকে ইনপুট পাথ, বিল্ড আইডি এবং ইনস্ট্যান্স টাইপ সহ বেশ কিছু প্যারামিটার প্রদান করতে হবে। আরও তথ্যের জন্য, ‘একটি সিমুলেশন তৈরি করুন ’ দেখুন।
  4. সিমুলেশন তালিকার আপডেটে মনিটরের স্ট্যাটাস পরীক্ষা করুন, যা নতুন সিমুলেশনটির অবস্থা দেখায়, যেমন— PENDING , RUNNING , COMPLETED
  5. সিমুলেশন সম্পন্ন হওয়ার পর, তৈরি হওয়া রিপোর্ট এবং আর্টিফ্যাক্টগুলো দেখুন। ইনপুট ফাইল, আউটপুট রিপোর্ট, লগ, লগক্যাট এবং বাগরিপোর্ট ক্লাউড স্টোরেজে সংরক্ষিত থাকে।
  6. ঐচ্ছিক: নির্ধারিত বা চলমান কোনো সিমুলেশন বাতিল করুন।

এপিআই ব্যবহার

অটোমেশন এবং অন্যান্য সিস্টেমের সাথে ইন্টিগ্রেশনের জন্য আপনি REST API ব্যবহার করতে পারেন।

অথেনটিকেশন সেকশনে এবং এন্ডপয়েন্ট ডেফিনিশনে ব্যবহৃত প্লেসহোল্ডার CLOUD_FUNCTION_URL বলতে সেই ক্লাউড ফাংশনের বেস ইউআরএলকে বোঝায়, যাকে কল করা হচ্ছে। আপনি গুগল ক্লাউড কনসোলের ক্লাউড ফাংশনস পেজে ফাংশন ইউআরএলগুলো খুঁজে পেতে পারেন; প্রতিটি ফাংশনের ইউআরএল তার ফাংশন ডিটেইলস পেজের ট্রিগার ট্যাবে দেখানো থাকে। বিকল্পভাবে, একটি apply কমান্ড চালানোর পর প্রিন্ট হওয়া টেরাফর্ম আউটপুটগুলোতেও আপনি এই ইউআরএলগুলো খুঁজে পেতে পারেন।

প্রমাণীকরণ

সমস্ত এপিআই অনুরোধ অবশ্যই একটি আইডেন্টিটি টোকেন দ্বারা প্রমাণীকৃত হতে হবে, যা আহ্বানকারীর পরিচয় প্রমাণ করে। উক্ত আইডেন্টিটির (ব্যবহারকারী বা পরিষেবা অ্যাকাউন্ট) টার্গেট ফাংশনে ক্লাউড ফাংশনস ইনভোকার পারমিশন থাকতে হবে।

  1. ব্যবহারকারীর আহ্বান (লোকাল এবং CLI): লোকাল মেশিন বা গুগল ক্লাউড-বহির্ভূত পরিবেশ থেকে API আহ্বান করার সময়, আপনাকে অবশ্যই ব্যবহারকারী অ্যাকাউন্টের জন্য প্রাপ্ত গুগল-প্রদত্ত একটি আইডেন্টিটি টোকেন ব্যবহার করতে হবে।

    TOKEN=$(gcloud auth print-identity-token)
    
  2. সার্ভিস অ্যাকাউন্ট আহ্বান (গুগল ক্লাউডের মধ্যে): যখন কোনো গুগল ক্লাউড রিসোর্স (যেমন, একটি Compute Engine VM, অন্য কোনো ক্লাউড ফাংশন, বা একটি Kubernetes ক্লাস্টার) থেকে API আহ্বান করা হয়, তখন রিসোর্সটির সাথে সংযুক্ত সার্ভিস অ্যাকাউন্টের আইডেন্টিটি ব্যবহার করুন। টোকেনটি রিসোর্সটির মেটাডেটা সার্ভার থেকে সংগ্রহ করতে হবে।

    TOKEN=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=CLOUD_FUNCTION_URL" -H "Metadata-Flavor: Google")
    

প্রাপ্ত টোকেনটি আপনার অনুরোধের Authorization হেডারে Bearer টোকেন হিসেবে অন্তর্ভুক্ত করুন।

এন্ডপয়েন্ট

ক্লাউড টেলিমেট্রি সিমুলেশন স্ট্যাকের ব্যবহারকারী-মুখী এন্ডপয়েন্টগুলো আপনাকে সিমুলেশন তৈরি ও মুছে ফেলতে অথবা ডেটাবেস থেকে সিমুলেশনের তথ্য পড়তে দেয়।

একটি সিমুলেশন তৈরি করুন

এই এন্ডপয়েন্টটি একটি নতুন সিমুলেশন অনুরোধ তৈরি করে এবং সেটিকে সম্পাদনের জন্য সময়সূচী নির্ধারণ করে।

  • এন্ডপয়েন্ট: POST https:// CLOUD_FUNCTION_URL /simulation-orchestrator-receive-request
  • অনুরোধের মূল অংশ:

    {
      "build_id": "latest",
      "file_path": "inputs/my-test-case/",
      "instance_type": "n1-standard-8",
      "owner": "user@example.com",
      "max_simulation_time": 300,
      "max_report_count": 5
    }
    
    • build_id (স্ট্রিং): যে এজেন্ট ডকার ইমেজটি ব্যবহার করতে হবে তার ট্যাগ, উদাহরণস্বরূপ, latest

    • file_path (স্ট্রিং): GCS বাকেটের মধ্যে metrics_config.zip এবং publisher_config.zip ফাইল দুটি যে ফোল্ডারে রয়েছে, তার পাথ।

    • instance_type (স্ট্রিং): কম্পিউট ইঞ্জিন মেশিন টাইপ। এই টাইপটিকে অবশ্যই নেস্টেড ভার্চুয়ালাইজেশন সমর্থন করতে হবে, যেমন n1 , n2 , বা t2d সিরিজ। আরও তথ্যের জন্য, নেস্টেড ভার্চুয়ালাইজেশন ওভারভিউ দেখুন।

    • owner (স্ট্রিং): সিমুলেশনটি শুরু করা ব্যবহারকারীর ইমেল।

    • max_simulation_time (পূর্ণসংখ্যা): সেকেন্ডে সিমুলেশনটি চলার সর্বোচ্চ সময়।

    • max_report_count (পূর্ণসংখ্যা): টেলিমেট্রি রিপোর্টের সংখ্যা, যার পরে সিমুলেশনটি শেষ হবে।

  • সফল প্রতিক্রিয়া (200 OK):

    { "id": "sim-a1b2c3d4e5f6" }
    

একটি সিমুলেশন মুছে ফেলুন

এই এন্ডপয়েন্টটি কোনো অপেক্ষাধীন বা চলমান সিমুলেশন বাতিল করে এবং এর সাথে যুক্ত রিসোর্সগুলো মুছে ফেলে।

  • এন্ডপয়েন্ট: POST https:// CLOUD_FUNCTION_URL /simulation-orchestrator-delete-simulation
  • হেডার:
    • Content-Type: application/json
  • অনুরোধের মূল অংশ:

    { "id": "sim-a1b2c3d4e5f6" }
    
  • সফল প্রতিক্রিয়া (200 OK): একটি খালি JSON অবজেক্ট {}

সিমুলেশন ডেটা পড়ুন

সিমুলেশন ডেটা পড়ার জন্য, আপনি simulation-reader ফাংশনটি ব্যবহার করতে পারেন। এই এন্ডপয়েন্টগুলো হিস্ট্রি, স্ট্যাটাস এবং সিস্টেম কনফিগারেশন পুনরুদ্ধার করতে GET মেথড ব্যবহার করে।

সিমুলেশন তালিকাভুক্ত করুন

ফিল্টারিং এবং সর্টিং সুবিধা সহ সিমুলেশনগুলির একটি পৃষ্ঠাভিত্তিক তালিকা পুনরুদ্ধার করে।

  • এন্ডপয়েন্ট: GET https:// CLOUD_FUNCTION_URL /simulation-reader/simulations
  • কোয়েরি প্যারামিটার (সবগুলো ঐচ্ছিক):

    • status (স্ট্রিং): সিমুলেশনের অবস্থা অনুযায়ী ফিল্টার করুন ( running , Simulation request received , cancelled , বা completed )।
    • owner (স্ট্রিং): মালিকের ইমেইল দিয়ে ফিল্টার করুন।
    • sort_by (string): যে ফিল্ড অনুসারে সাজানো হবে ( received_at , status_updated_at , started_at )। ডিফল্ট হিসেবে received_at ব্যবহৃত হয়।
    • sort_order (স্ট্রিং): সাজানোর দিক, asc বা desc । ডিফল্ট হলো desc
    • page_size (পূর্ণসংখ্যা): প্রতি পৃষ্ঠায় ফলাফলের সংখ্যা। ডিফল্ট মান ২০।
    • page_token (স্ট্রিং): ফলাফলের পরবর্তী পৃষ্ঠা আনার জন্য টোকেন।
  • অনুরোধের উদাহরণ:

    curl -H "Authorization: Bearer $TOKEN"
    "https://CLOUD_FUNCTION_URL/simulation-reader/simulations?status=completed&owner=user@example.com&sort_by=status_updated_at"
    
  • সফল প্রতিক্রিয়া (200 OK):

    • সিমুলেশনগুলির একটি অ্যারে এবং একটি ঐচ্ছিক next_page_token সম্বলিত একটি JSON অবজেক্ট ফেরত দেয়।
    {
      "simulations": [
        {
          "id": "1234-abcd",
          "owner": "some@email.com",
          "status": "completed",
          "status_updated_at": "2025-12-05T14:50:00.952Z",
          "received_at": "2025-12-05T14:46:43.106Z",
          "started_at": "2025-12-05T14:47:05.848Z",
          "ended_at": "0001-01-01T00:00:00Z",
          "instance_id": "sim-1234-abcd",
          "ip": "10.156.15.230",
          "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
          "instance_type": "n1-standard-8",
          "file_path": "gs://your-project-simulation_files/path/",
          "max_simulation_time": 60,
          "max_report_count": 1
        },
        {
          "id": "5678-efgh",
          "owner": "some@email.com",
          "status": "completed",
          "status_updated_at": "2025-11-07T14:49:54.25Z",
          "received_at": "2025-11-07T14:46:54.959Z",
          "started_at": "2025-11-07T14:47:13.714Z",
          "ended_at": "0001-01-01T00:00:00Z",
          "instance_id": "sim-5678-efgh",
          "ip": "10.156.15.221",
          "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
          "instance_type": "n1-standard-8",
          "file_path": "gs://your-project-simulation_files/path/",
          "max_simulation_time": 60,
          "max_report_count": 1
        }
      ],
      "next_page_token": "M7bydGsAptLncj8SOCb1"
    }
    
একটি নির্দিষ্ট সিমুলেশন পান

এর আইডি দ্বারা একটি নির্দিষ্ট সিমুলেশনের সম্পূর্ণ বিবরণ পুনরুদ্ধার করে।

  • শেষবিন্দু:

    GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/[SIMULATION_ID]
    
  • সফল প্রতিক্রিয়া (200 OK): অনুরোধ করা সিমুলেশনের বিবরণ সম্বলিত একটি JSON অবজেক্ট ফেরত দেয়।

    {
      "id": "1234-abcd",
      "owner": "some@email.com",
      "status": "completed",
      "status_updated_at": "2025-12-05T14:50:00.952Z",
      "received_at": "2025-12-05T14:46:43.106Z",
      "started_at": "2025-12-05T14:47:05.848Z",
      "ended_at": "0001-01-01T00:00:00Z",
      "instance_id": "sim-1234-abcd",
      "ip": "10.156.15.230",
      "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
      "instance_type": "n1-standard-8",
      "file_path": "gs://your-project-simulation_files/path/",
      "max_simulation_time": 60,
      "max_report_count": 1
    }
    
সিস্টেম মেট্রিক্স এবং কনফিগারেশন পান

এই এন্ডপয়েন্টগুলো সিমুলেশন অবকাঠামোর বর্তমান লোড এবং কনফিগারেশন সম্পর্কে ধারণা দেয়।

  • চলমান সংখ্যা জানুন: চলমান সিমুলেশনগুলোর সংখ্যা ফেরত দেয়।

    • শেষবিন্দু:

      GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/running/count
      
    • সফল প্রতিক্রিয়া (200 OK):

      {
        "count": 0
      }
      
  • একযোগে সর্বাধিক সংখ্যক ভিএম জানুন: কনফিগার করা একযোগে চলমান ভিএম-এর সর্বোচ্চ সংখ্যা ফেরত দেয়।

    • শেষবিন্দু:

      GET https://CLOUD_FUNCTION_URL/simulation-reader/config/max-running-vms
      
    • সফল প্রতিক্রিয়া (200 OK):

      {
        "max_running_vms": 5
      }