ফায়ারবেস সতর্কতা ট্রিগার

ফায়ারবেস বিভিন্ন ধরনের প্রজেক্ট এবং অ্যাপ ম্যানেজমেন্ট ইভেন্টের জন্য অ্যালার্ট প্রদান করে। নিচে কয়েকটি উদাহরণ ইভেন্ট দেওয়া হলো, যখন ফায়ারবেস আপনাকে এই ধরনের অ্যালার্ট পাঠাতে পারে:

  • Crashlytics এর মাধ্যমে, আপনার অ্যাপে ক্র্যাশের সংখ্যা নাটকীয়ভাবে বেড়ে গেলে আমরা আপনাকে সতর্ক করতে পারি।
  • Performance Monitoring এর জন্য, আপনার অ্যাপের স্টার্ট-আপ টাইম আপনার সেট করা সীমা অতিক্রম করলে আমরা আপনাকে সতর্ক করতে পারি।
  • App Distribution ক্ষেত্রে, আপনার কোনো পরীক্ষক নতুন কোনো iOS ডিভাইস রেজিস্টার করলে আমরা আপনাকে জানাতে পারি।

অ্যালার্টের ধরন এবং প্রজেক্ট সদস্যের সেট করা পছন্দের ওপর নির্ভর করে, Firebase এই ধরনের অ্যালার্টগুলো Firebase কনসোলে দেখায় অথবা ইমেলের মাধ্যমে পাঠিয়ে দেয়।

এই পৃষ্ঠায় বর্ণনা করা হয়েছে কিভাবে Cloud Functions for Firebase (2nd gen)-এ অ্যালার্ট ইভেন্ট পরিচালনা করার জন্য ফাংশন লিখতে হয়।

এটা কীভাবে কাজ করে?

এই উৎসগুলো থেকে নির্গত অ্যালার্ট ইভেন্টের প্রতিক্রিয়ায় আপনি ফাংশনগুলো সক্রিয় করতে পারেন:

একটি সাধারণ লাইফসাইকেলে, অ্যালার্ট ইভেন্টের মাধ্যমে ট্রিগার হওয়া একটি ফাংশন নিম্নলিখিত কাজগুলো করে থাকে:

  1. ফায়ারবেস থেকে একটি নির্দিষ্ট ধরনের অ্যালার্ট নির্গত হওয়ার জন্য শোনে/অপেক্ষা করে।
  2. অ্যালার্ট নির্গত হলে এটি সক্রিয় হয় এবং ইভেন্ট পেলোড গ্রহণ করে, যেটিতে ইভেন্টটি সম্পর্কে নির্দিষ্ট তথ্য থাকে।
  3. ইভেন্ট পেলোড পরিচালনা করার জন্য আপনার ফাংশনের কোডকে আহ্বান করে।

অ্যালার্ট ইভেন্টে একটি ফাংশন ট্রিগার করুন

অ্যালার্ট ইভেন্টগুলো পরিচালনা করার জন্য একটি ফাংশন লিখতে firebase-functions/v2/alerts সাবপ্যাকেজটি ব্যবহার করুন। নিম্নলিখিত পণ্য-নির্দিষ্ট উদাহরণগুলো এমন একটি কর্মপ্রবাহ প্রদর্শন করে, যেখানে ফায়ারবেস থেকে কোনো পণ্যের জন্য অ্যালার্ট নির্গত হলে একটি ফাংশন ওয়েবহুক ব্যবহার করে ডিসকর্ড চ্যানেলে একটি বার্তা পোস্ট করে।

একটি Crashlytics অ্যালার্ট ইভেন্ট পরিচালনা করুন

নিম্নলিখিত Crashlytics উদাহরণটির জন্য, আপনি একটি নতুন মারাত্মক ক্র্যাশ সমস্যার অ্যালার্ট ইভেন্ট পরিচালনা করতে Cloud Functions for Firebase ব্যবহার করবেন। এই ফাংশনটি একটি ডিসকর্ড চ্যানেলে মেসেজের মাধ্যমে অ্যালার্টের তথ্য পোস্ট করে।

ডিসকর্ডে ক্র্যাশ নোটিফিকেশনের উদাহরণ

নতুন মারাত্মক দুর্ঘটনা সংক্রান্ত সমস্যার জন্য বিজ্ঞপ্তির নমুনা

ফাংশনটি ফায়ারবেস কর্তৃক একটি নতুন মারাত্মক সমস্যা প্রকাশের সাথে সম্পর্কিত ইভেন্টটি শোনে:

নোড.জেএস

exports.postfatalissuetodiscord = onNewFatalIssuePublished(async (event) => {

পাইথন

@crashlytics_fn.on_new_fatal_issue_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_fatal_issue_to_discord(event: crashlytics_fn.CrashlyticsNewFatalIssueEvent) -> None:
    """Publishes a message to Discord whenever a new Crashlytics fatal issue occurs."""

এরপর ফাংশনটি ফেরত আসা ইভেন্ট অবজেক্টটি পার্স করে, ইভেন্ট পেলোড থেকে দরকারি তথ্য বের করে এবং ডিসকর্ড চ্যানেলে পোস্ট করার জন্য একটি মেসেজ তৈরি করে।

নোড.জেএস

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {id, title, subtitle, appVersion} = event.data.payload.issue;
  const message = `
🚨 New fatal issue for ${appId} in version ${appVersion} 🚨

**${title}**

${subtitle}

id: \`${id}\`
`;

পাইথন

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    issue = event.data.payload.issue
    message = f"""
🚨 New fatal issue for {app_id} in version {issue.app_version} 🚨

# {issue.title}

{issue.subtitle}

ID: `{issue.id}`
""".strip()

অবশেষে, ফাংশনটি একটি HTTP অনুরোধের মাধ্যমে তৈরি করা বার্তাটি ডিসকর্ডে পাঠায়:

নোড.জেএস

const response = await postMessageToDiscord("Crashlytics Bot", message);
if (response.ok) {
  logger.info(
      `Posted fatal Crashlytics alert ${id} for ${appId} to Discord`,
      event.data.payload,
  );
} else {
  throw new Error(`Discord returned status code ${response.status}`);
}

পাইথন

response = post_message_to_discord("Crashlytics Bot", message, DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted fatal Crashlytics alert {issue.id} for {app_id} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

আপনি ক্যাপচার করতে পারেন এমন সমস্ত Crashlytics অ্যালার্ট ইভেন্ট সম্পর্কে জানতে, Crashlytics অ্যালার্টের রেফারেন্স ডকুমেন্টেশনে যান।

Performance Monitoring অ্যালার্ট ইভেন্ট পরিচালনা করুন

এই উদাহরণটি এমন একটি ফাংশন এক্সপোর্ট করে যা পারফরম্যান্স থ্রেশহোল্ড অ্যালার্ট ইভেন্টগুলো শোনে:

নোড.জেএস

exports.postperformancealerttodiscord = onThresholdAlertPublished(
    async (event) => {

পাইথন

@performance_fn.on_threshold_alert_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_performance_alert_to_discord(event: performance_fn.PerformanceThresholdAlertEvent) -> None:
    """Publishes a message to Discord whenever a performance threshold alert is fired."""

এরপর ফাংশনটি ফেরত আসা ইভেন্ট অবজেক্টটি পার্স করে, ইভেন্ট পেলোড থেকে দরকারি তথ্য বের করে এবং ডিসকর্ড চ্যানেলে পোস্ট করার জন্য একটি মেসেজ তৈরি করে।

নোড.জেএস

      // construct a helpful message to send to Discord
      const appId = event.appId;
      const {
        eventName,
        metricType,
        eventType,
        numSamples,
        thresholdValue,
        thresholdUnit,
        conditionPercentile,
        appVersion,
        violationValue,
        violationUnit,
        investigateUri,
      } = event.data.payload;
      const message = `
    ⚠️ Performance Alert for ${metricType} of ${eventType}: **${eventName}** ⚠️
    
    App id: ${appId}
    Alert condition: ${thresholdValue} ${thresholdUnit}
    Percentile (if applicable): ${conditionPercentile}
    App version (if applicable): ${appVersion}
    
    Violation: ${violationValue} ${violationUnit}
    Number of samples checked: ${numSamples}
    
    **Investigate more:** ${investigateUri}
    `;

পাইথন

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    perf = event.data.payload
    message = f"""
⚠️ Performance Alert for {perf.metric_type} of {perf.event_type}: **{perf.event_name}** ⚠️

App ID: {app_id}
Alert condition: {perf.threshold_value} {perf.threshold_unit}
Percentile (if applicable): {perf.condition_percentile}
App version (if applicable): {perf.app_version}

Violation: {perf.violation_value} {perf.violation_unit}
Number of samples checked: {perf.num_samples}

**Investigate more:** {perf.investigate_uri}
""".strip()

অবশেষে, ফাংশনটি একটি HTTP অনুরোধের মাধ্যমে তৈরি করা বার্তাটি ডিসকর্ডে পাঠায়:

নোড.জেএস

const response = await postMessageToDiscord(
    "Firebase Performance Bot", message);
if (response.ok) {
  logger.info(
      `Posted Firebase Performance alert ${eventName} to Discord`,
      event.data.payload,
  );
} else {
  throw new Error(`Discord returned status code ${response.status}`);
}

পাইথন

response = post_message_to_discord("App Performance Bot", message,
                                   DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted Firebase Performance alert {perf.event_name} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

আপনি ক্যাপচার করতে পারেন এমন সমস্ত পারফরম্যান্স অ্যালার্ট ইভেন্ট সম্পর্কে জানতে, Performance Monitoring অ্যালার্টের রেফারেন্স ডকুমেন্টেশনে যান।

একটি App Distribution অ্যালার্ট ইভেন্ট পরিচালনা করুন

এই বিভাগের উদাহরণটি আপনাকে দেখাবে কীভাবে নতুন পরীক্ষকদের iOS ডিভাইসের জন্য অ্যালার্ট ফাংশন লিখতে হয়।

এই উদাহরণে, ফাংশনটি সেইসব ইভেন্ট শোনে যা প্রতিবার একজন পরীক্ষক একটি নতুন iOS ডিভাইস রেজিস্টার করার সময় পাঠানো হয়। যখন একটি নতুন iOS ডিভাইস রেজিস্টার করা হয়, তখন আপনাকে সেই ডিভাইসের UDID দিয়ে আপনার প্রভিশনিং প্রোফাইল আপডেট করতে হবে এবং তারপর অ্যাপটি পুনরায় ডিস্ট্রিবিউট করতে হবে।

নোড.জেএস

exports.postnewduuidtodiscord = onNewTesterIosDevicePublished(async (event) => {

পাইথন

@app_distribution_fn.on_new_tester_ios_device_published(secrets=["DISCORD_WEBHOOK_URL"])
def post_new_udid_to_discord(event: app_distribution_fn.NewTesterDeviceEvent) -> None:
    """Publishes a message to Discord whenever someone registers a new iOS test device."""

এরপর ফাংশনটি ফেরত আসা অবজেক্টটি পার্স করে, ইভেন্ট পেলোড থেকে দরকারি তথ্য বের করে এবং ডিসকর্ড চ্যানেলে পোস্ট করার জন্য একটি মেসেজ তৈরি করে।

নোড.জেএস

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {
    testerDeviceIdentifier,
    testerDeviceModelName,
    testerEmail,
    testerName,
  } = event.data.payload;
  const message = `
📱 New iOS device registered by ${testerName} <${testerEmail}> for ${appId}

UDID **${testerDeviceIdentifier}** for ${testerDeviceModelName}
`;

পাইথন

    # Construct a helpful message to send to Discord.
    app_id = event.app_id
    app_dist = event.data.payload
    message = f"""
📱 New iOS device registered by {app_dist.tester_name} <{app_dist.tester_email}> for {app_id}

UDID **{app_dist.tester_device_identifier}** for {app_dist.tester_device_model_name}
""".strip()

অবশেষে, ফাংশনটি একটি HTTP অনুরোধের মাধ্যমে তৈরি করা বার্তাটি ডিসকর্ডে পাঠায়:

নোড.জেএস

const response = await postMessageToDiscord("AppDistribution Bot", message);
if (response.ok) {
  logger.info(
      `Posted iOS device registration alert for ${testerEmail} to Discord`,
  );
} else {
  throw new Error(`Discord returned status code ${response.status}`);
}

পাইথন

response = post_message_to_discord("App Distro Bot", message, DISCORD_WEBHOOK_URL.value)
if response.ok:
    print(f"Posted iOS device registration alert for {app_dist.tester_email} to Discord.")
    pprint.pp(event.data.payload)
else:
    response.raise_for_status()

আপনি ক্যাপচার করতে পারেন এমন সমস্ত App Distribution অ্যালার্ট ইভেন্ট সম্পর্কে জানতে, App Distribution অ্যালার্টের রেফারেন্স ডকুমেন্টেশনে যান।

App Distribution থেকে ইন-অ্যাপ ফিডব্যাক ফায়ারবেস অ্যালার্ট দ্বারা ট্রিগার হওয়া কোনো ফাংশন কীভাবে ব্যবহার করতে হয় তা জানতে, "সেন্ড ইন-অ্যাপ ফিডব্যাক টু জিরা" দেখুন।