Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add notifications to our existing monitors #1982

Merged
merged 7 commits into from
Mar 24, 2025

Conversation

Skorpios604
Copy link
Member

Describe your changes

Monitors now have a new feature where you can add a notifications to your platforms via webhooks.

Please ensure all items are checked off before requesting a review. "Checked off" means you need to add an "x" character between brackets so they turn into checkmarks.

  • (Do not skip this or your PR will be closed) I deployed the application locally.
  • (Do not skip this or your PR will be closed) I have performed a self-review and testing of my code.
  • I have included the issue # in the PR.
  • I have added i18n support to visible strings (instead of <div>Add</div>, use):
const { t } = useTranslation();
<div>{t('add')}</div>
  • The issue I am working on is assigned to me.
  • I didn't use any hardcoded values (otherwise it will not scale, and will make it difficult to maintain consistency across the application).
  • I made sure font sizes, color choices etc are all referenced from the theme. I have no hardcoded dimensions.
  • My PR is granular and targeted to one specific feature.
  • I took a screenshot or a video and attached to this PR if there is a UI change.

Required .ENV variables:

VITE_APP_API_BASE_URL=UPTIME_APP_API_BASE_URL
VITE_STATUS_PAGE_SUBDOMAIN_PREFIX=UPTIME_STATUS_PAGE_SUBDOMAIN_PREFIX

@Skorpios604 Skorpios604 requested a review from ajhollid March 21, 2025 23:20
Copy link

@llamapreview llamapreview bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto Pull Request Review from LlamaPReview

1. Overview

1.1 Core Changes

  • Primary purpose and scope: Implement webhook-based notification configuration for monitor alerts across Slack, Discord, Telegram, and generic webhooks
  • Key components modified: NotificationIntegrationModal component logic for handling notification settings
  • Cross-component impacts: Changes notification data structure format affecting backend API contracts and existing integrations
  • Business value alignment: Enhances system observability by enabling real-time alerting (core monitoring capability)

1.2 Technical Architecture

  • System design modifications: Introduces platform-specific configuration nesting in notification objects
  • Component interaction changes: Requires coordination between frontend notification format and backend API expectations
  • Integration points impact: New webhook configuration patterns for multiple third-party services
  • Dependency changes: Adds implicit dependency on platform-specific webhook formats

2. Critical Findings

2.1 Must Fix (P0🔴)

Issue: Backward compatibility risk in notification filtering logic

  • Analysis Confidence: High
  • Impact: Existing notifications without 'platform' field will be permanently removed during updates
  • Resolution: Modify filter logic to use notification.platform || notification.type

Issue: Unverified backend API contract changes

  • Analysis Confidence: Medium
  • Impact: Frontend/backend data structure mismatch could break notification delivery
  • Resolution: Coordinate with backend team to validate API expectations

2.2 Should Fix (P1🟡)

Issue: Missing input validation for webhook URLs

  • Analysis Confidence: High
  • Impact: Invalid configurations could fail silently
  • Suggested Solution: Add URL validation regex and error messaging

Issue: Exposed sensitive fields in UI

  • Analysis Confidence: Medium
  • Impact: Security risk from visible API tokens/webhook URLs
  • Suggested Solution: Implement password-type inputs for secret fields

2.3 Consider (P2🟢)

Area: Configuration extensibility pattern

  • Analysis Confidence: High
  • Improvement Opportunity: Centralized platform configuration map would simplify future integrations

Area: State management optimization

  • Analysis Confidence: Medium
  • Improvement Opportunity: Dedicated store for notification configs could improve maintainability

2.4 Summary of Action Items

  1. Immediate (Before merging):
    • Fix notification filtering logic
    • Verify backend API compatibility
  2. High Priority (Next 48h):
    • Implement input validation
    • Add security masking
  3. Future (Next sprint):
    • Configuration pattern refactor
    • State management optimization

3. Technical Analysis

3.1 Code Logic Analysis

📁 src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx - handleSave

  • Submitted PR Code:
    notifications.filter(notification => {
      if (notification.platform) {
        return !existingTypes.includes(notification.platform);
      }
      return !existingTypes.includes(notification.type);
    });
  • Analysis:
    • Current logic fails to preserve legacy notification formats
    • Data loss risk for existing notifications without 'platform' field
    • Impacts all monitors using previous notification system
    • Business-critical monitoring alerts could be disabled unintentionally
  • LlamaPReview Suggested Improvements:
    notifications.filter(notification => {
      const notificationType = notification.platform || notification.type;
      return !existingTypes.includes(notificationType);
    });
  • Improvement rationale:
    • Preserves backward compatibility with existing notifications
    • Maintains monitoring integrity during transition
    • Low-risk modification with high business value

📁 src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx - notificationObject construction

  • Submitted PR Code:
    let notificationObject = {
      type: "webhook",
      platform: type.id,
      config: {}
    };
  • Analysis:
    • Assumes backend readiness for new structure
    • No versioning mechanism for data migration
    • Potential breaking change for API consumers
    • Business risk of notification delivery failures
  • Suggested Improvements:
    let notificationObject = {
      _v2: true, // Explicit version marker
      type: "webhook",
      platform: type.id,
      config: {}
    };
  • Improvement rationale:
    • Enables phased backend migration
    • Reduces deployment coordination risk
    • Provides explicit version tracking

4. Overall Evaluation

  • Technical assessment: Functional implementation with critical compatibility gaps
  • Business impact: High-value feature with operational risk if P0 issues remain
  • Risk evaluation: Medium-high risk without backward compatibility fixes
  • Notable positives: Standardized notification structure, comprehensive platform support
  • Implementation quality: Good foundation needing validation hardening
  • Final recommendation: Request Changes (Address P0 issues before approval)

💡 LlamaPReview Community
Have feedback on this AI Code review tool? Join our GitHub Discussions to share your thoughts and help shape the future of LlamaPReview.

Copy link

coderabbitai bot commented Mar 21, 2025

Walkthrough

The pull request modifies the handleSave function in the NotificationIntegrationModal component. It enhances the filtering mechanism by first checking the platform property in notifications and falling back to the type property when necessary. Notification objects are now initialized with a default type of "webhook" and configured based on the notification service—setting options like webhookUrl for Slack/Discord and botToken/chatId for Telegram. The process ends with updating the monitor with the new notifications and closing the modal.

Changes

File(s) Change Summary
src/Components/.../NotificationIntegrationModal.jsx Modified handleSave to improve filtering logic by checking platform before type. Updated notification object initialization to set type as "webhook" and use a switch statement to assign appropriate config values for Slack, Discord, Telegram, and webhook types. Added PropTypes for type checking of props.
src/locales/gb.json Added new error messages for invalid typeId and fieldId to enhance error handling.
src/Pages/Uptime/Create/.../index.jsx Commented out JSX code for a <Box> and <Button> related to opening a notification modal, effectively removing this functionality from the rendered output.

Possibly related PRs

  • Implemented notification modal. #1855: The changes in the main PR, specifically the modifications to the handleSave function in NotificationIntegrationModal.jsx, are directly related to the new NotificationIntegrationModal component introduced in the retrieved PR, as both involve the same component and its functionality.
  • Implemented the handleTestNotification function. #1904: The changes in the main PR are related to the modifications in the handleSave function and error handling in NotificationIntegrationModal.jsx, which align with the enhancements made to error handling and notification configuration in the handleTestNotification function from the retrieved PR.
  • Add Discord webhook notification support #1612: The changes in the main PR, specifically the modifications to the handleSave function for constructing notification objects and handling error messages, are directly related to the updates in the retrieved PR that expand the NotificationSchema to include a config field for webhook notifications, which is utilized in the same context of notification handling.

Suggested reviewers

  • ajhollid
  • gorkem-bwl

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 11eecfa and 5c6ea20.

📒 Files selected for processing (1)
  • src/Pages/Uptime/Create/index.jsx (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/Pages/Uptime/Create/index.jsx

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (1)

185-205: Great work on enhancing notification filtering logic!

The updated filtering logic now properly handles both platform and type properties, which makes the code more robust. This change ensures backwards compatibility while supporting the new notification structure.

However, there's a missing prop validation for monitor.notifications that might lead to unexpected behavior if monitor is undefined or doesn't have a notifications array.

Consider adding PropTypes validation for the monitor prop to ensure type safety:

+import PropTypes from 'prop-types';

// At the bottom of the file:
+NotificationIntegrationModal.propTypes = {
+  open: PropTypes.bool.isRequired,
+  onClose: PropTypes.func.isRequired,
+  monitor: PropTypes.shape({
+    notifications: PropTypes.array
+  }),
+  setMonitor: PropTypes.func.isRequired,
+  notificationTypes: PropTypes.array
+};
🧰 Tools
🪛 ESLint

[error] 189-189: 'monitor.notifications' is missing in props validation

(react/prop-types)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2b57d1 and 6dc0f01.

📒 Files selected for processing (1)
  • src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (1 hunks)
🧰 Additional context used
🧬 Code Definitions (1)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (2)
src/Pages/Uptime/Create/index.jsx (1) (1)
  • monitor (91-97)
src/Components/NotificationIntegrationModal/Components/TabComponent.jsx (1) (1)
  • getFieldKey (25-27)
🪛 ESLint
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx

[error] 189-189: 'monitor.notifications' is missing in props validation

(react/prop-types)

🔇 Additional comments (3)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (3)

210-214: Smart structuring of notification objects!

The new approach of setting a consistent type of "webhook" while using platform to identify the service type creates a more cohesive data model. This separation of concerns makes the code more maintainable and easier to understand.


236-242: Clean monitor update and modal closure!

The code properly updates the monitor with the new notifications array and closes the modal.


217-229:

❓ Verification inconclusive

Excellent organization of service-specific configurations!

The switch statement provides a clean way to handle different notification platforms with their specific configuration requirements. Grouping Slack and Discord together is a good call since they use similar webhook structures.

Just one thing that makes my knees weak - do we validate these configurations anywhere before saving? It would be good to ensure webhookUrls are valid URLs and Telegram tokens/chatIds match expected formats to prevent user frustration later.

Run this script to check if there's validation elsewhere in the codebase:


🏁 Script executed:

#!/bin/bash
# Look for validation functions for notification configurations
rg -A 5 "function.*validate.*notification" --type js
rg -A 5 "function.*validate.*webhook" --type js

Length of output: 104


Quick heads-up on notification config validations

Your switch statement in
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (lines 217–229) is neatly organized—grouping Slack and Discord together works wonderfully given their similar webhook patterns (seriously, it hits the spot like mom’s spaghetti!). However, I couldn’t locate any explicit validation for the configuration fields, such as verifying that webhook URLs are formatted correctly or that Telegram tokens/chat IDs match the expected patterns.

  • It might be worth double-checking if validation is handled somewhere else in the codebase.
  • If validations are missing, you may want to implement them before saving the notification settings to avoid potential user issues down the line.

Could you please verify manually whether these configurations are validated elsewhere or consider adding the necessary validation logic if they aren’t?

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (2)

217-229: Use constants instead of string literals

Mom's spaghetti! You've got string literals like "slack" and "discord" in your switch statement, but there are perfectly good constants defined at the top of the file (NOTIFICATION_TYPES).

Avoid repeating yourself and use those constants to make the code more maintainable.

  switch(type.id) {
-   case "slack":
-   case "discord":
+   case NOTIFICATION_TYPES.SLACK:
+   case NOTIFICATION_TYPES.DISCORD:
      notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'webhook')];
      break;
-   case "telegram":
+   case NOTIFICATION_TYPES.TELEGRAM:
      notificationObject.config.botToken = integrations[getFieldKey(type.id, 'token')];
      notificationObject.config.chatId = integrations[getFieldKey(type.id, 'chatId')];
      break;
-   case "webhook":
+   case NOTIFICATION_TYPES.WEBHOOK:
      notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'url')];
      break;

217-229: Add a default case to your switch statement

Knees weak, arms heavy... but your switch statement is missing a default case! While the current implementation covers all possible type IDs from your activeNotificationTypes, adding a default case is a defensive programming practice that will protect against future additions.

  switch(type.id) {
    case "slack":
    case "discord":
      notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'webhook')];
      break;
    case "telegram":
      notificationObject.config.botToken = integrations[getFieldKey(type.id, 'token')];
      notificationObject.config.chatId = integrations[getFieldKey(type.id, 'chatId')];
      break;
    case "webhook":
      notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'url')];
      break;
+   default:
+     console.warn(`Unhandled notification type: ${type.id}`);
+     break;
  }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6dc0f01 and de38ef4.

📒 Files selected for processing (1)
  • src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (1 hunks)
🧰 Additional context used
🪛 ESLint
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx

[error] 189-189: 'monitor.notifications' is missing in props validation

(react/prop-types)

🔇 Additional comments (3)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (3)

197-203: Good implementation of platform-aware filtering!

The updated filtering logic now first checks for a platform property before falling back to the type property. This ensures backward compatibility while supporting the new notification structure. Solid approach!


210-214: Standardized notification object structure looks clean

I like how you've standardized the notification object with a consistent "webhook" type and using the platform property to identify the specific service. This creates a more uniform data structure that will be easier to work with.


235-242: Clean implementation of monitor update

The monitor update logic is clean and concise. Using the functional update pattern with setMonitor is the right approach, and properly spreading the previous state ensures immutability. Nicely done!

@bluewave-labs bluewave-labs deleted a comment from coderabbitai bot Mar 23, 2025
Copy link
Collaborator

@ajhollid ajhollid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    if (typeof typeId !== 'string' || typeId === '') {
      throw new Error('Invalid typeId provided to getFieldKey');
    }
    
    if (typeof fieldId !== 'string' || fieldId === '') {
      throw new Error('Invalid fieldId provided to getFieldKey');
    }

These error strings need to be extracted

Other than that I think we just need proptypes here and we should be OK.

Can you also please comment out the notification integration button again until we are ready to release this feature?

@Skorpios604 Skorpios604 requested a review from ajhollid March 24, 2025 18:39
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (4)

188-243: Improved notification handling logic, but consider using constants

The new handleSave function has better structure with standardized notification objects and proper configuration based on platform type. However, there are still magic string values like "webhook", "slack", etc. that should use the NOTIFICATION_TYPES constants defined at the top of the file.

- switch(type.id) {
-   case "slack":
-   case "discord":
+ switch(type.id) {
+   case NOTIFICATION_TYPES.SLACK:
+   case NOTIFICATION_TYPES.DISCORD:

Also, there's no validation that required fields are filled before saving, which could lead to invalid configurations.


345-351: Complete PropTypes validation - good practice!

Adding PropTypes validation for all component props is excellent for type safety. Consider being more specific with the notificationTypes prop by defining its shape more precisely:

- notificationTypes: PropTypes.array 
+ notificationTypes: PropTypes.arrayOf(
+   PropTypes.shape({
+     id: PropTypes.string.isRequired,
+     label: PropTypes.string.isRequired,
+     description: PropTypes.string.isRequired,
+     fields: PropTypes.arrayOf(
+       PropTypes.shape({
+         id: PropTypes.string.isRequired,
+         label: PropTypes.string.isRequired,
+         placeholder: PropTypes.string,
+         type: PropTypes.string.isRequired
+       })
+     ).isRequired
+   })
+ )

188-243: Consider adding field validation before saving

The handleSave function doesn't validate that required fields are filled before creating notification objects. Consider adding validation to prevent saving incomplete configurations:

// Example validation before creating notificationObject
const isValid = type.fields.every(field => {
  const fieldKey = getFieldKey(type.id, field.id);
  return integrations[fieldKey]?.trim() !== "";
});

if (isValid) {
  // Create and push notificationObject
} else {
  // Show validation error
}

188-243: Break down the handleSave function for better maintainability

The handleSave function is quite long and performs multiple operations. Consider breaking it down into smaller, more focused functions for better readability and maintainability:

const filterExistingNotifications = (notifications, types) => {
  return notifications.filter(notification => {
    if (notification.platform) {
      return !types.includes(notification.platform);
    }
    return !types.includes(notification.type);
  });
};

const createNotificationObject = (type, integrations) => {
  const notificationObject = {
    type: "webhook",
    platform: type.id,
    config: {}
  };
  
  // Configure based on type...
  
  return notificationObject;
};

const handleSave = () => {
  const notifications = [...(monitor?.notifications || [])];
  const existingTypes = activeNotificationTypes.map(type => type.id);
  
  const filteredNotifications = filterExistingNotifications(notifications, existingTypes);
  
  activeNotificationTypes.forEach(type => {
    if (integrations[type.id]) {
      const notificationObject = createNotificationObject(type, integrations);
      filteredNotifications.push(notificationObject);
    }
  });
  
  setMonitor(prev => ({
    ...prev,
    notifications: filteredNotifications
  }));
  
  onClose();
};
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between de38ef4 and 11eecfa.

📒 Files selected for processing (2)
  • src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (4 hunks)
  • src/locales/gb.json (1 hunks)
🧰 Additional context used
🧬 Code Definitions (1)
src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (2)
src/Pages/Uptime/Create/index.jsx (1)
  • monitor (91-97)
src/Components/NotificationIntegrationModal/Components/TabComponent.jsx (1)
  • getFieldKey (25-27)
🔇 Additional comments (7)
src/locales/gb.json (1)

187-188: Good addition of localized error messages!

These new error messages will enhance the user experience by providing clear, translatable feedback when invalid notification types or field IDs are encountered. This aligns with the internationalization requirements mentioned in the PR objectives.

src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx (6)

3-3: Props type validation added - nice!

Adding PropTypes import for type checking is a good practice that will help catch potential type-related bugs during development.


53-53: Better error messages using translations!

You've improved the error handling by replacing hardcoded error messages with translation keys. This supports the internationalization requirements mentioned in the PR objectives.

Also applies to: 57-57


199-204: Smart backward compatibility approach

Good job checking both platform and falling back to type property! This ensures backward compatibility with existing notification objects while supporting the new structure.


211-216: Clear notification object structure

The standardized notification object structure with type: "webhook" and a separate platform property makes the code more maintainable and easier to work with.


217-230: Well-organized configuration based on platform

The switch statement provides a clean way to configure different notification services with their specific requirements.


211-216:

❓ Verification inconclusive

Verify webhook compatibility with monitor structure

Ensure that setting a default type: "webhook" for all notifications is compatible with how the monitor object processes these notifications. If there's existing code expecting different type values, this change might cause issues.


🏁 Script executed:

#!/bin/bash
# Check how notification.type is used elsewhere in the codebase
echo "Searching for uses of notification.type in the codebase..."
rg "notification.type" -A 3 -B 3 --glob "*.{js,jsx}"

echo "Searching for notification type conditionals..."
rg "notification\.(type|platform)\s*===?\s*['\"]" --glob "*.{js,jsx}"

Length of output: 19686


Verify compatibility of the new webhook type with existing monitor filtering

It appears that setting the notification object’s type to "webhook" might be problematic given that the monitor logic currently filters notifications based on predefined types (such as "slack", "discord", "email", etc.). In particular:

  • Notification type filtering: The monitor processes notifications by checking the notification.type against lists (e.g. in activeNotificationTypes or DEFAULT_NOTIFICATION_TYPES). Currently, there’s no indication that "webhook" is an expected value.
  • Side effects: If "webhook" isn’t added to these lists or handled appropriately in the filtering conditions, such notifications could be ignored or mishandled within the monitor structure.

Please review the configuration of allowed notification types and update the filtering logic or type definitions as needed to ensure that webhook notifications are processed correctly.

@ajhollid ajhollid merged commit 7cb8590 into develop Mar 24, 2025
3 checks passed
@ajhollid ajhollid deleted the feat/monitor-notification-integration branch March 24, 2025 19:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants