Browse Source

feat(replays) Add notification enum settings for replays (#44580)

Billing quota notification settings are defined in sentry and need to be
define for each data category that has notifications.
Mark Story 2 years ago
parent
commit
2849e88010

+ 1 - 0
src/sentry/models/notificationsetting.py

@@ -80,6 +80,7 @@ class NotificationSetting(Model):
             (NotificationSettingTypes.QUOTA_ERRORS, "quotaErrors"),
             (NotificationSettingTypes.QUOTA_TRANSACTIONS, "quotaTransactions"),
             (NotificationSettingTypes.QUOTA_ATTACHMENTS, "quotaAttacments"),
+            (NotificationSettingTypes.QUOTA_REPLAYS, "quotaReplays"),
             (NotificationSettingTypes.QUOTA_WARNINGS, "quotaWarnings"),
             (NotificationSettingTypes.QUOTA_SPEND_ALLOCATIONS, "quotaSpendAllocations"),
             (NotificationSettingTypes.SPIKE_PROTECTION, "spikeProtection"),

+ 2 - 0
src/sentry/notifications/defaults.py

@@ -17,6 +17,7 @@ NOTIFICATION_SETTINGS_ALL_SOMETIMES = {
     NotificationSettingTypes.QUOTA_ERRORS: NotificationSettingOptionValues.ALWAYS,
     NotificationSettingTypes.QUOTA_TRANSACTIONS: NotificationSettingOptionValues.ALWAYS,
     NotificationSettingTypes.QUOTA_ATTACHMENTS: NotificationSettingOptionValues.ALWAYS,
+    NotificationSettingTypes.QUOTA_REPLAYS: NotificationSettingOptionValues.ALWAYS,
     NotificationSettingTypes.QUOTA_WARNINGS: NotificationSettingOptionValues.ALWAYS,
     NotificationSettingTypes.QUOTA_SPEND_ALLOCATIONS: NotificationSettingOptionValues.ALWAYS,
     NotificationSettingTypes.SPIKE_PROTECTION: NotificationSettingOptionValues.ALWAYS,
@@ -32,6 +33,7 @@ NOTIFICATION_SETTINGS_DEFAULT_OFF = {
     NotificationSettingTypes.QUOTA_ERRORS: NotificationSettingOptionValues.NEVER,
     NotificationSettingTypes.QUOTA_TRANSACTIONS: NotificationSettingOptionValues.NEVER,
     NotificationSettingTypes.QUOTA_ATTACHMENTS: NotificationSettingOptionValues.NEVER,
+    NotificationSettingTypes.QUOTA_REPLAYS: NotificationSettingOptionValues.NEVER,
     NotificationSettingTypes.QUOTA_WARNINGS: NotificationSettingOptionValues.NEVER,
     NotificationSettingTypes.QUOTA_SPEND_ALLOCATIONS: NotificationSettingOptionValues.NEVER,
     NotificationSettingTypes.SPIKE_PROTECTION: NotificationSettingOptionValues.NEVER,

+ 2 - 1
src/sentry/notifications/helpers.py

@@ -247,6 +247,7 @@ def get_scope_type(type: NotificationSettingTypes) -> NotificationScopeType:
         NotificationSettingTypes.QUOTA_ERRORS,
         NotificationSettingTypes.QUOTA_TRANSACTIONS,
         NotificationSettingTypes.QUOTA_ATTACHMENTS,
+        NotificationSettingTypes.QUOTA_REPLAYS,
         NotificationSettingTypes.QUOTA_WARNINGS,
         NotificationSettingTypes.QUOTA_SPEND_ALLOCATIONS,
     ]:
@@ -260,7 +261,7 @@ def get_scope_type(type: NotificationSettingTypes) -> NotificationScopeType:
         return NotificationScopeType.PROJECT
 
     raise Exception(
-        f"type {type}, must be alerts, deploy, workflow, approval, quota, quotaErrors, quotaTransactions, quotaAttachments, quotaWarnings, quotaSpendAllocations, spikeProtection"
+        f"type {type}, must be alerts, deploy, workflow, approval, quota, quotaErrors, quotaTransactions, quotaAttachments, quotaReplays, quotaWarnings, quotaSpendAllocations, spikeProtection"
     )
 
 

+ 6 - 0
src/sentry/notifications/types.py

@@ -53,6 +53,7 @@ class NotificationSettingTypes(Enum):
     QUOTA_ERRORS = 51
     QUOTA_TRANSACTIONS = 52
     QUOTA_ATTACHMENTS = 53
+    QUOTA_REPLAYS = 56
 
     # Sub category of quotas for warnings before hitting the actual limit
     QUOTA_WARNINGS = 54
@@ -74,6 +75,7 @@ NOTIFICATION_SETTING_TYPES = {
     NotificationSettingTypes.QUOTA_ERRORS: "quotaErrors",
     NotificationSettingTypes.QUOTA_TRANSACTIONS: "quotaTransactions",
     NotificationSettingTypes.QUOTA_ATTACHMENTS: "quotaAttachments",
+    NotificationSettingTypes.QUOTA_REPLAYS: "quotaReplays",
     NotificationSettingTypes.QUOTA_WARNINGS: "quotaWarnings",
     NotificationSettingTypes.QUOTA_SPEND_ALLOCATIONS: "quotaSpendAllocations",
     NotificationSettingTypes.SPIKE_PROTECTION: "spikeProtection",
@@ -180,6 +182,10 @@ VALID_VALUES_FOR_KEY = {
         NotificationSettingOptionValues.ALWAYS,
         NotificationSettingOptionValues.NEVER,
     },
+    NotificationSettingTypes.QUOTA_REPLAYS: {
+        NotificationSettingOptionValues.ALWAYS,
+        NotificationSettingOptionValues.NEVER,
+    },
     NotificationSettingTypes.QUOTA_WARNINGS: {
         NotificationSettingOptionValues.ALWAYS,
         NotificationSettingOptionValues.NEVER,

+ 11 - 0
static/app/views/settings/account/notifications/fields2.tsx

@@ -157,6 +157,17 @@ export const QUOTA_FIELDS = [
       ['never', t('Off')],
     ] as const,
   },
+  {
+    name: 'quotaReplays',
+    label: t('Replays'),
+    help: tct('Receive notifications about your replay quotas. [learnMore:Learn more]', {
+      learnMore: <ExternalLink href={getDocsLinkForEventType('replay')} />,
+    }),
+    choices: [
+      ['always', t('On')],
+      ['never', t('Off')],
+    ] as const,
+  },
   {
     name: 'quotaAttachments',
     label: t('Attachments'),

+ 1 - 0
static/app/views/settings/account/notifications/notificationSettingsByType.tsx

@@ -55,6 +55,7 @@ const typeMappedChildren = {
     'quotaErrors',
     'quotaTransactions',
     'quotaAttachments',
+    'quotaReplays',
     'quotaWarnings',
     'quotaSpendAllocations',
   ],

+ 5 - 1
static/app/views/settings/account/notifications/utils.tsx

@@ -429,12 +429,16 @@ export const getParentField = (
 /**
  * Returns a link to docs on explaining how to manage quotas for that event type
  */
-export function getDocsLinkForEventType(event: 'error' | 'transaction' | 'attachment') {
+export function getDocsLinkForEventType(
+  event: 'error' | 'transaction' | 'attachment' | 'replay'
+) {
   switch (event) {
     case 'transaction':
       return 'https://docs.sentry.io/product/performance/transaction-summary/#what-is-a-transaction';
     case 'attachment':
       return 'https://docs.sentry.io/product/accounts/quotas/manage-attachments-quota/#2-rate-limiting';
+    case 'replay':
+      return 'https://docs.sentry.io/product/session-replay/';
     default:
       return 'https://docs.sentry.io/product/accounts/quotas/manage-event-stream-guide/#common-workflows-for-managing-your-event-stream';
   }