diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index fdfee387d4..c22e593256 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -485,6 +485,27 @@ components: required: true schema: type: string + IncidentNotificationRuleIDPathParameter: + description: The ID of the notification rule. + in: path + name: id + required: true + schema: + example: 00000000-0000-0000-0000-000000000001 + format: uuid + type: string + IncidentNotificationRuleIncludeQueryParameter: + description: 'Comma-separated list of resources to include. Supported values: + `created_by_user`, `last_modified_by_user`, `incident_type`, `notification_template` + + ' + explode: false + in: query + name: include + required: false + schema: + example: created_by_user,incident_type,notification_template + type: string IncidentNotificationTemplateIDPathParameter: description: The ID of the notification template. in: path @@ -10851,6 +10872,14 @@ components: meta: $ref: '#/components/schemas/DataDeletionResponseMeta' type: object + CreateIncidentNotificationRuleRequest: + description: Create request for a notification rule. + properties: + data: + $ref: '#/components/schemas/IncidentNotificationRuleCreateData' + required: + - data + type: object CreateIncidentNotificationTemplateRequest: description: Create request for a notification template. properties: @@ -19939,6 +19968,283 @@ components: example: '@test.user@test.com' type: string type: object + IncidentNotificationRule: + description: Response with a notification rule. + properties: + data: + $ref: '#/components/schemas/IncidentNotificationRuleResponseData' + included: + description: Related objects that are included in the response. + items: + $ref: '#/components/schemas/IncidentNotificationRuleIncludedItems' + type: array + required: + - data + type: object + IncidentNotificationRuleArray: + description: Response with notification rules. + properties: + data: + description: The `NotificationRuleArray` `data`. + items: + $ref: '#/components/schemas/IncidentNotificationRuleResponseData' + type: array + included: + description: Related objects that are included in the response. + items: + $ref: '#/components/schemas/IncidentNotificationRuleIncludedItems' + type: array + meta: + $ref: '#/components/schemas/IncidentNotificationRuleArrayMeta' + required: + - data + type: object + IncidentNotificationRuleArrayMeta: + description: Response metadata. + properties: + pagination: + $ref: '#/components/schemas/IncidentNotificationRuleArrayMetaPage' + type: object + IncidentNotificationRuleArrayMetaPage: + description: Pagination metadata. + properties: + next_offset: + description: The offset for the next page of results. + example: 15 + format: int64 + type: integer + offset: + description: The current offset in the results. + example: 0 + format: int64 + type: integer + size: + description: The number of results returned per page. + example: 15 + format: int64 + type: integer + type: object + IncidentNotificationRuleAttributes: + description: The notification rule's attributes. + properties: + conditions: + $ref: '#/components/schemas/IncidentNotificationRuleConditions' + created: + description: Timestamp when the notification rule was created. + example: '2025-01-15T10:30:00Z' + format: date-time + readOnly: true + type: string + enabled: + description: Whether the notification rule is enabled. + example: true + type: boolean + handles: + $ref: '#/components/schemas/IncidentNotificationRuleHandles' + modified: + description: Timestamp when the notification rule was last modified. + example: '2025-01-15T14:45:00Z' + format: date-time + readOnly: true + type: string + renotify_on: + $ref: '#/components/schemas/IncidentNotificationRuleRenotifyOn' + trigger: + description: The trigger event for this notification rule. + example: incident_created_trigger + type: string + visibility: + $ref: '#/components/schemas/IncidentNotificationRuleAttributesVisibility' + required: + - conditions + - handles + - visibility + - trigger + - enabled + - created + - modified + type: object + IncidentNotificationRuleAttributesVisibility: + description: The visibility of the notification rule. + enum: + - all + - organization + - private + example: organization + type: string + x-enum-varnames: + - ALL + - ORGANIZATION + - PRIVATE + IncidentNotificationRuleConditions: + description: The conditions that trigger this notification rule. + example: + - field: severity + values: + - SEV-1 + - SEV-2 + items: + $ref: '#/components/schemas/IncidentNotificationRuleConditionsItems' + type: array + IncidentNotificationRuleConditionsItems: + description: A condition that must be met to trigger the notification rule. + properties: + field: + description: The incident field to evaluate + example: severity + type: string + values: + description: The value(s) to compare against. Multiple values are `ORed` + together. + example: + - SEV-1 + - SEV-2 + items: + type: string + type: array + required: + - field + - values + type: object + IncidentNotificationRuleCreateAttributes: + description: The attributes for creating a notification rule. + properties: + conditions: + $ref: '#/components/schemas/IncidentNotificationRuleConditions' + enabled: + default: false + description: Whether the notification rule is enabled. + example: true + type: boolean + handles: + $ref: '#/components/schemas/IncidentNotificationRuleHandles' + renotify_on: + $ref: '#/components/schemas/IncidentNotificationRuleRenotifyOn' + trigger: + description: The trigger event for this notification rule. + example: incident_created_trigger + type: string + visibility: + $ref: '#/components/schemas/IncidentNotificationRuleCreateAttributesVisibility' + required: + - conditions + - handles + - trigger + type: object + IncidentNotificationRuleCreateAttributesVisibility: + description: The visibility of the notification rule. + enum: + - all + - organization + - private + example: organization + type: string + x-enum-varnames: + - ALL + - ORGANIZATION + - PRIVATE + IncidentNotificationRuleCreateData: + description: Notification rule data for a create request. + properties: + attributes: + $ref: '#/components/schemas/IncidentNotificationRuleCreateAttributes' + relationships: + $ref: '#/components/schemas/IncidentNotificationRuleCreateDataRelationships' + type: + $ref: '#/components/schemas/IncidentNotificationRuleType' + required: + - type + - attributes + type: object + IncidentNotificationRuleCreateDataRelationships: + description: The definition of `NotificationRuleCreateDataRelationships` object. + properties: + incident_type: + $ref: '#/components/schemas/RelationshipToIncidentType' + notification_template: + $ref: '#/components/schemas/RelationshipToIncidentNotificationTemplate' + type: object + IncidentNotificationRuleHandles: + description: The notification handles (targets) for this rule. + example: + - '@team-email@company.com' + - '@slack-channel' + items: + description: A notification handle (email, Slack channel, etc.). + type: string + type: array + IncidentNotificationRuleIncludedItems: + description: Objects related to a notification rule. + oneOf: + - $ref: '#/components/schemas/User' + - $ref: '#/components/schemas/IncidentTypeObject' + - $ref: '#/components/schemas/IncidentNotificationTemplateObject' + IncidentNotificationRuleRelationships: + description: The notification rule's resource relationships. + properties: + created_by_user: + $ref: '#/components/schemas/RelationshipToUser' + incident_type: + $ref: '#/components/schemas/RelationshipToIncidentType' + last_modified_by_user: + $ref: '#/components/schemas/RelationshipToUser' + notification_template: + $ref: '#/components/schemas/RelationshipToIncidentNotificationTemplate' + type: object + IncidentNotificationRuleRenotifyOn: + description: List of incident fields that trigger re-notification when changed. + example: + - status + - severity + items: + description: An incident field name. + type: string + type: array + IncidentNotificationRuleResponseData: + description: Notification rule data from a response. + properties: + attributes: + $ref: '#/components/schemas/IncidentNotificationRuleAttributes' + id: + description: The unique identifier of the notification rule. + example: 00000000-0000-0000-0000-000000000001 + format: uuid + type: string + relationships: + $ref: '#/components/schemas/IncidentNotificationRuleRelationships' + type: + $ref: '#/components/schemas/IncidentNotificationRuleType' + required: + - id + - type + type: object + IncidentNotificationRuleType: + description: Notification rules resource type. + enum: + - incident_notification_rules + example: incident_notification_rules + type: string + x-enum-varnames: + - INCIDENT_NOTIFICATION_RULES + IncidentNotificationRuleUpdateData: + description: Notification rule data for an update request. + properties: + attributes: + $ref: '#/components/schemas/IncidentNotificationRuleCreateAttributes' + id: + description: The unique identifier of the notification rule. + example: 00000000-0000-0000-0000-000000000001 + format: uuid + type: string + relationships: + $ref: '#/components/schemas/IncidentNotificationRuleCreateDataRelationships' + type: + $ref: '#/components/schemas/IncidentNotificationRuleType' + required: + - id + - type + - attributes + type: object IncidentNotificationTemplate: description: Response with a notification template. properties: @@ -20103,6 +20409,24 @@ components: oneOf: - $ref: '#/components/schemas/User' - $ref: '#/components/schemas/IncidentTypeObject' + IncidentNotificationTemplateObject: + description: A notification template object for inclusion in other resources. + properties: + attributes: + $ref: '#/components/schemas/IncidentNotificationTemplateAttributes' + id: + description: The unique identifier of the notification template. + example: 00000000-0000-0000-0000-000000000001 + format: uuid + type: string + relationships: + $ref: '#/components/schemas/IncidentNotificationTemplateRelationships' + type: + $ref: '#/components/schemas/IncidentNotificationTemplateType' + required: + - id + - type + type: object IncidentNotificationTemplateRelationships: description: The notification template's resource relationships. properties: @@ -33499,6 +33823,14 @@ components: data: $ref: '#/components/schemas/Deployment' type: object + PutIncidentNotificationRuleRequest: + description: Put request for a notification rule. + properties: + data: + $ref: '#/components/schemas/IncidentNotificationRuleUpdateData' + required: + - data + type: object Query: description: A data query used by an app. This can take the form of an external action, a data transformation, or a state variable. @@ -34674,6 +35006,28 @@ components: required: - data type: object + RelationshipToIncidentNotificationTemplate: + description: A relationship reference to a notification template. + properties: + data: + $ref: '#/components/schemas/RelationshipToIncidentNotificationTemplateData' + required: + - data + type: object + RelationshipToIncidentNotificationTemplateData: + description: The notification template relationship data. + properties: + id: + description: The unique identifier of the notification template. + example: 00000000-0000-0000-0000-000000000001 + format: uuid + type: string + type: + $ref: '#/components/schemas/IncidentNotificationTemplateType' + required: + - id + - type + type: object RelationshipToIncidentPostmortem: description: A relationship reference for postmortems. example: @@ -47267,8 +47621,9 @@ components: error_tracking_write: Edit Error Tracking issues. events_read: Read Events data. hosts_read: List hosts and their attributes. + incident_notification_settings_read: View Incident Notification Rule Settings. incident_notification_settings_write: Configure Incidents Notification - settings. + Rule settings. incident_read: View incidents in Datadog. incident_settings_read: View Incident Settings. incident_settings_write: Configure Incident Settings. @@ -54198,6 +54553,205 @@ paths: - incident_write x-unstable: '**Note**: This endpoint is in public beta. + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + /api/v2/incidents/config/notification-rules: + get: + description: Lists all notification rules for the organization. Optionally filter + by incident type. + operationId: ListIncidentNotificationRules + parameters: + - $ref: '#/components/parameters/IncidentNotificationRuleIncludeQueryParameter' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IncidentNotificationRuleArray' + description: OK + '400': + $ref: '#/components/responses/BadRequestResponse' + '401': + $ref: '#/components/responses/UnauthorizedResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - incident_notification_settings_read + summary: List incident notification rules + tags: + - Incidents + x-permission: + operator: AND + permissions: + - incident_notification_settings_read + x-unstable: '**Note**: This endpoint is in Preview. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + post: + description: Creates a new notification rule. + operationId: CreateIncidentNotificationRule + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CreateIncidentNotificationRuleRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/IncidentNotificationRule' + description: Created + '400': + $ref: '#/components/responses/BadRequestResponse' + '401': + $ref: '#/components/responses/UnauthorizedResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - incident_notification_settings_write + summary: Create an incident notification rule + tags: + - Incidents + x-codegen-request-body-name: body + x-permission: + operator: AND + permissions: + - incident_notification_settings_write + x-unstable: '**Note**: This endpoint is in Preview. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + /api/v2/incidents/config/notification-rules/{id}: + delete: + description: Deletes a notification rule by its ID. + operationId: DeleteIncidentNotificationRule + parameters: + - $ref: '#/components/parameters/IncidentNotificationRuleIDPathParameter' + - $ref: '#/components/parameters/IncidentNotificationRuleIncludeQueryParameter' + responses: + '204': + description: No Content + '400': + $ref: '#/components/responses/BadRequestResponse' + '401': + $ref: '#/components/responses/UnauthorizedResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - incident_notification_settings_write + summary: Delete an incident notification rule + tags: + - Incidents + x-permission: + operator: AND + permissions: + - incident_notification_settings_write + x-unstable: '**Note**: This endpoint is in Preview. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + get: + description: Retrieves a specific notification rule by its ID. + operationId: GetIncidentNotificationRule + parameters: + - $ref: '#/components/parameters/IncidentNotificationRuleIDPathParameter' + - $ref: '#/components/parameters/IncidentNotificationRuleIncludeQueryParameter' + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IncidentNotificationRule' + description: OK + '400': + $ref: '#/components/responses/BadRequestResponse' + '401': + $ref: '#/components/responses/UnauthorizedResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - incident_notification_settings_read + summary: Get an incident notification rule + tags: + - Incidents + x-permission: + operator: AND + permissions: + - incident_notification_settings_read + x-unstable: '**Note**: This endpoint is in Preview. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + put: + description: Updates an existing notification rule with a complete replacement. + operationId: UpdateIncidentNotificationRule + parameters: + - $ref: '#/components/parameters/IncidentNotificationRuleIDPathParameter' + - $ref: '#/components/parameters/IncidentNotificationRuleIncludeQueryParameter' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PutIncidentNotificationRuleRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/IncidentNotificationRule' + description: OK + '400': + $ref: '#/components/responses/BadRequestResponse' + '401': + $ref: '#/components/responses/UnauthorizedResponse' + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - incident_notification_settings_write + summary: Update an incident notification rule + tags: + - Incidents + x-codegen-request-body-name: body + x-permission: + operator: AND + permissions: + - incident_notification_settings_write + x-unstable: '**Note**: This endpoint is in Preview. + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/incidents/config/notification-templates: get: diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index 8dd5f39aec..aaaa1e67c8 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -4337,6 +4337,13 @@ datadog\_api\_client.v2.model.create\_data\_deletion\_response\_body module :members: :show-inheritance: +datadog\_api\_client.v2.model.create\_incident\_notification\_rule\_request module +---------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.create_incident_notification_rule_request + :members: + :show-inheritance: + datadog\_api\_client.v2.model.create\_incident\_notification\_template\_request module -------------------------------------------------------------------------------------- @@ -8516,6 +8523,118 @@ datadog\_api\_client.v2.model.incident\_notification\_handle module :members: :show-inheritance: +datadog\_api\_client.v2.model.incident\_notification\_rule module +----------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_array module +------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_array + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_array\_meta module +------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_array_meta + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_array\_meta\_page module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_array_meta_page + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_attributes module +----------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_attributes + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_attributes\_visibility module +----------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_attributes_visibility + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_conditions\_items module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_conditions_items + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_create\_attributes module +------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_create_attributes + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_create\_attributes\_visibility module +------------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_create\_data module +------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_create_data + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_create\_data\_relationships module +---------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_create_data_relationships + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_included\_items module +---------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_included_items + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_relationships module +-------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_relationships + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_response\_data module +--------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_response_data + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_type module +----------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_type + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.incident\_notification\_rule\_update\_data module +------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_rule_update_data + :members: + :show-inheritance: + datadog\_api\_client.v2.model.incident\_notification\_template module --------------------------------------------------------------------- @@ -8579,6 +8698,13 @@ datadog\_api\_client.v2.model.incident\_notification\_template\_included\_items :members: :show-inheritance: +datadog\_api\_client.v2.model.incident\_notification\_template\_object module +----------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.incident_notification_template_object + :members: + :show-inheritance: + datadog\_api\_client.v2.model.incident\_notification\_template\_relationships module ------------------------------------------------------------------------------------ @@ -14823,6 +14949,13 @@ datadog\_api\_client.v2.model.publish\_app\_response module :members: :show-inheritance: +datadog\_api\_client.v2.model.put\_incident\_notification\_rule\_request module +------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.put_incident_notification_rule_request + :members: + :show-inheritance: + datadog\_api\_client.v2.model.query module ------------------------------------------ @@ -15012,6 +15145,20 @@ datadog\_api\_client.v2.model.relationship\_to\_incident\_integration\_metadatas :members: :show-inheritance: +datadog\_api\_client.v2.model.relationship\_to\_incident\_notification\_template module +--------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.relationship_to_incident_notification_template + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.relationship\_to\_incident\_notification\_template\_data module +--------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.relationship_to_incident_notification_template_data + :members: + :show-inheritance: + datadog\_api\_client.v2.model.relationship\_to\_incident\_postmortem module --------------------------------------------------------------------------- diff --git a/examples/v2/incidents/CreateIncidentNotificationRule.py b/examples/v2/incidents/CreateIncidentNotificationRule.py new file mode 100644 index 0000000000..28d309f337 --- /dev/null +++ b/examples/v2/incidents/CreateIncidentNotificationRule.py @@ -0,0 +1,82 @@ +""" +Create an incident notification rule returns "Created" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from datadog_api_client.v2.model.create_incident_notification_rule_request import CreateIncidentNotificationRuleRequest +from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_create_data import IncidentNotificationRuleCreateData +from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, +) +from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType +from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType +from datadog_api_client.v2.model.incident_type_type import IncidentTypeType +from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, +) +from datadog_api_client.v2.model.relationship_to_incident_notification_template_data import ( + RelationshipToIncidentNotificationTemplateData, +) +from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType +from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData +from uuid import UUID + +body = CreateIncidentNotificationRuleRequest( + data=IncidentNotificationRuleCreateData( + attributes=IncidentNotificationRuleCreateAttributes( + conditions=[ + IncidentNotificationRuleConditionsItems( + field="severity", + values=[ + "SEV-1", + "SEV-2", + ], + ), + ], + enabled=True, + handles=[ + "@team-email@company.com", + "@slack-channel", + ], + renotify_on=[ + "status", + "severity", + ], + trigger="incident_created_trigger", + visibility=IncidentNotificationRuleCreateAttributesVisibility.ORGANIZATION, + ), + relationships=IncidentNotificationRuleCreateDataRelationships( + incident_type=RelationshipToIncidentType( + data=RelationshipToIncidentTypeData( + id="00000000-0000-0000-0000-000000000000", + type=IncidentTypeType.INCIDENT_TYPES, + ), + ), + notification_template=RelationshipToIncidentNotificationTemplate( + data=RelationshipToIncidentNotificationTemplateData( + id=UUID("00000000-0000-0000-0000-000000000001"), + type=IncidentNotificationTemplateType.NOTIFICATION_TEMPLATES, + ), + ), + ), + type=IncidentNotificationRuleType.INCIDENT_NOTIFICATION_RULES, + ), +) + +configuration = Configuration() +configuration.unstable_operations["create_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.create_incident_notification_rule(body=body) + + print(response) diff --git a/examples/v2/incidents/CreateIncidentNotificationRule_3029800608.py b/examples/v2/incidents/CreateIncidentNotificationRule_3029800608.py new file mode 100644 index 0000000000..2144fea11c --- /dev/null +++ b/examples/v2/incidents/CreateIncidentNotificationRule_3029800608.py @@ -0,0 +1,67 @@ +""" +Create incident notification rule returns "Created" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from datadog_api_client.v2.model.create_incident_notification_rule_request import CreateIncidentNotificationRuleRequest +from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_create_data import IncidentNotificationRuleCreateData +from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, +) +from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType +from datadog_api_client.v2.model.incident_type_type import IncidentTypeType +from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType +from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData + +# there is a valid "incident_type" in the system +INCIDENT_TYPE_DATA_ID = environ["INCIDENT_TYPE_DATA_ID"] + +body = CreateIncidentNotificationRuleRequest( + data=IncidentNotificationRuleCreateData( + attributes=IncidentNotificationRuleCreateAttributes( + conditions=[ + IncidentNotificationRuleConditionsItems( + field="severity", + values=[ + "SEV-1", + "SEV-2", + ], + ), + ], + handles=[ + "@test-email@company.com", + ], + visibility=IncidentNotificationRuleCreateAttributesVisibility.ORGANIZATION, + trigger="incident_created_trigger", + enabled=True, + ), + relationships=IncidentNotificationRuleCreateDataRelationships( + incident_type=RelationshipToIncidentType( + data=RelationshipToIncidentTypeData( + id=INCIDENT_TYPE_DATA_ID, + type=IncidentTypeType.INCIDENT_TYPES, + ), + ), + ), + type=IncidentNotificationRuleType.INCIDENT_NOTIFICATION_RULES, + ), +) + +configuration = Configuration() +configuration.unstable_operations["create_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.create_incident_notification_rule(body=body) + + print(response) diff --git a/examples/v2/incidents/DeleteIncidentNotificationRule.py b/examples/v2/incidents/DeleteIncidentNotificationRule.py new file mode 100644 index 0000000000..2e7a65dfe1 --- /dev/null +++ b/examples/v2/incidents/DeleteIncidentNotificationRule.py @@ -0,0 +1,15 @@ +""" +Delete an incident notification rule returns "No Content" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from uuid import UUID + +configuration = Configuration() +configuration.unstable_operations["delete_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + api_instance.delete_incident_notification_rule( + id=UUID("00000000-0000-0000-0000-000000000001"), + ) diff --git a/examples/v2/incidents/DeleteIncidentNotificationRule_4148107167.py b/examples/v2/incidents/DeleteIncidentNotificationRule_4148107167.py new file mode 100644 index 0000000000..23b4b64afd --- /dev/null +++ b/examples/v2/incidents/DeleteIncidentNotificationRule_4148107167.py @@ -0,0 +1,18 @@ +""" +Delete incident notification rule returns "No Content" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi + +# there is a valid "notification_rule" in the system +NOTIFICATION_RULE_DATA_ID = environ["NOTIFICATION_RULE_DATA_ID"] + +configuration = Configuration() +configuration.unstable_operations["delete_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + api_instance.delete_incident_notification_rule( + id=NOTIFICATION_RULE_DATA_ID, + ) diff --git a/examples/v2/incidents/GetIncidentNotificationRule.py b/examples/v2/incidents/GetIncidentNotificationRule.py new file mode 100644 index 0000000000..9a6c8e0165 --- /dev/null +++ b/examples/v2/incidents/GetIncidentNotificationRule.py @@ -0,0 +1,17 @@ +""" +Get an incident notification rule returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from uuid import UUID + +configuration = Configuration() +configuration.unstable_operations["get_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.get_incident_notification_rule( + id=UUID("00000000-0000-0000-0000-000000000001"), + ) + + print(response) diff --git a/examples/v2/incidents/GetIncidentNotificationRule_67441486.py b/examples/v2/incidents/GetIncidentNotificationRule_67441486.py new file mode 100644 index 0000000000..0609e235f7 --- /dev/null +++ b/examples/v2/incidents/GetIncidentNotificationRule_67441486.py @@ -0,0 +1,20 @@ +""" +Get incident notification rule returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi + +# there is a valid "notification_rule" in the system +NOTIFICATION_RULE_DATA_ID = environ["NOTIFICATION_RULE_DATA_ID"] + +configuration = Configuration() +configuration.unstable_operations["get_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.get_incident_notification_rule( + id=NOTIFICATION_RULE_DATA_ID, + ) + + print(response) diff --git a/examples/v2/incidents/ListIncidentNotificationRules.py b/examples/v2/incidents/ListIncidentNotificationRules.py new file mode 100644 index 0000000000..a43b440109 --- /dev/null +++ b/examples/v2/incidents/ListIncidentNotificationRules.py @@ -0,0 +1,14 @@ +""" +List incident notification rules returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi + +configuration = Configuration() +configuration.unstable_operations["list_incident_notification_rules"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.list_incident_notification_rules() + + print(response) diff --git a/examples/v2/incidents/UpdateIncidentNotificationRule.py b/examples/v2/incidents/UpdateIncidentNotificationRule.py new file mode 100644 index 0000000000..58de030a5e --- /dev/null +++ b/examples/v2/incidents/UpdateIncidentNotificationRule.py @@ -0,0 +1,85 @@ +""" +Update an incident notification rule returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, +) +from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType +from datadog_api_client.v2.model.incident_notification_rule_update_data import IncidentNotificationRuleUpdateData +from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType +from datadog_api_client.v2.model.incident_type_type import IncidentTypeType +from datadog_api_client.v2.model.put_incident_notification_rule_request import PutIncidentNotificationRuleRequest +from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, +) +from datadog_api_client.v2.model.relationship_to_incident_notification_template_data import ( + RelationshipToIncidentNotificationTemplateData, +) +from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType +from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData +from uuid import UUID + +body = PutIncidentNotificationRuleRequest( + data=IncidentNotificationRuleUpdateData( + attributes=IncidentNotificationRuleCreateAttributes( + conditions=[ + IncidentNotificationRuleConditionsItems( + field="severity", + values=[ + "SEV-1", + "SEV-2", + ], + ), + ], + enabled=True, + handles=[ + "@team-email@company.com", + "@slack-channel", + ], + renotify_on=[ + "status", + "severity", + ], + trigger="incident_created_trigger", + visibility=IncidentNotificationRuleCreateAttributesVisibility.ORGANIZATION, + ), + id=UUID("00000000-0000-0000-0000-000000000001"), + relationships=IncidentNotificationRuleCreateDataRelationships( + incident_type=RelationshipToIncidentType( + data=RelationshipToIncidentTypeData( + id="00000000-0000-0000-0000-000000000000", + type=IncidentTypeType.INCIDENT_TYPES, + ), + ), + notification_template=RelationshipToIncidentNotificationTemplate( + data=RelationshipToIncidentNotificationTemplateData( + id=UUID("00000000-0000-0000-0000-000000000001"), + type=IncidentNotificationTemplateType.NOTIFICATION_TEMPLATES, + ), + ), + ), + type=IncidentNotificationRuleType.INCIDENT_NOTIFICATION_RULES, + ), +) + +configuration = Configuration() +configuration.unstable_operations["update_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.update_incident_notification_rule( + id=UUID("00000000-0000-0000-0000-000000000001"), body=body + ) + + print(response) diff --git a/examples/v2/incidents/UpdateIncidentNotificationRule_1207309457.py b/examples/v2/incidents/UpdateIncidentNotificationRule_1207309457.py new file mode 100644 index 0000000000..bbc188787f --- /dev/null +++ b/examples/v2/incidents/UpdateIncidentNotificationRule_1207309457.py @@ -0,0 +1,70 @@ +""" +Update incident notification rule returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, +) +from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType +from datadog_api_client.v2.model.incident_notification_rule_update_data import IncidentNotificationRuleUpdateData +from datadog_api_client.v2.model.incident_type_type import IncidentTypeType +from datadog_api_client.v2.model.put_incident_notification_rule_request import PutIncidentNotificationRuleRequest +from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType +from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData + +# there is a valid "notification_rule" in the system +NOTIFICATION_RULE_DATA_ID = environ["NOTIFICATION_RULE_DATA_ID"] + +# there is a valid "incident_type" in the system +INCIDENT_TYPE_DATA_ID = environ["INCIDENT_TYPE_DATA_ID"] + +body = PutIncidentNotificationRuleRequest( + data=IncidentNotificationRuleUpdateData( + attributes=IncidentNotificationRuleCreateAttributes( + enabled=False, + conditions=[ + IncidentNotificationRuleConditionsItems( + field="severity", + values=[ + "SEV-1", + ], + ), + ], + handles=[ + "@updated-team-email@company.com", + ], + visibility=IncidentNotificationRuleCreateAttributesVisibility.PRIVATE, + trigger="incident_modified_trigger", + ), + relationships=IncidentNotificationRuleCreateDataRelationships( + incident_type=RelationshipToIncidentType( + data=RelationshipToIncidentTypeData( + id=INCIDENT_TYPE_DATA_ID, + type=IncidentTypeType.INCIDENT_TYPES, + ), + ), + ), + id=NOTIFICATION_RULE_DATA_ID, + type=IncidentNotificationRuleType.INCIDENT_NOTIFICATION_RULES, + ), +) + +configuration = Configuration() +configuration.unstable_operations["update_incident_notification_rule"] = True +with ApiClient(configuration) as api_client: + api_instance = IncidentsApi(api_client) + response = api_instance.update_incident_notification_rule(id=NOTIFICATION_RULE_DATA_ID, body=body) + + print(response) diff --git a/src/datadog_api_client/configuration.py b/src/datadog_api_client/configuration.py index 0b3338d111..d2ae00ff19 100644 --- a/src/datadog_api_client/configuration.py +++ b/src/datadog_api_client/configuration.py @@ -269,21 +269,25 @@ def __init__( "v2.get_data_deletion_requests": False, "v2.create_incident": False, "v2.create_incident_integration": False, + "v2.create_incident_notification_rule": False, "v2.create_incident_notification_template": False, "v2.create_incident_todo": False, "v2.create_incident_type": False, "v2.delete_incident": False, "v2.delete_incident_integration": False, + "v2.delete_incident_notification_rule": False, "v2.delete_incident_notification_template": False, "v2.delete_incident_todo": False, "v2.delete_incident_type": False, "v2.get_incident": False, "v2.get_incident_integration": False, + "v2.get_incident_notification_rule": False, "v2.get_incident_notification_template": False, "v2.get_incident_todo": False, "v2.get_incident_type": False, "v2.list_incident_attachments": False, "v2.list_incident_integrations": False, + "v2.list_incident_notification_rules": False, "v2.list_incident_notification_templates": False, "v2.list_incidents": False, "v2.list_incident_todos": False, @@ -292,6 +296,7 @@ def __init__( "v2.update_incident": False, "v2.update_incident_attachments": False, "v2.update_incident_integration": False, + "v2.update_incident_notification_rule": False, "v2.update_incident_notification_template": False, "v2.update_incident_todo": False, "v2.update_incident_type": False, diff --git a/src/datadog_api_client/v2/api/incidents_api.py b/src/datadog_api_client/v2/api/incidents_api.py index b71c8b8aec..99ae061de9 100644 --- a/src/datadog_api_client/v2/api/incidents_api.py +++ b/src/datadog_api_client/v2/api/incidents_api.py @@ -20,6 +20,10 @@ from datadog_api_client.v2.model.incident_response_data import IncidentResponseData from datadog_api_client.v2.model.incident_response import IncidentResponse from datadog_api_client.v2.model.incident_create_request import IncidentCreateRequest +from datadog_api_client.v2.model.incident_notification_rule_array import IncidentNotificationRuleArray +from datadog_api_client.v2.model.incident_notification_rule import IncidentNotificationRule +from datadog_api_client.v2.model.create_incident_notification_rule_request import CreateIncidentNotificationRuleRequest +from datadog_api_client.v2.model.put_incident_notification_rule_request import PutIncidentNotificationRuleRequest from datadog_api_client.v2.model.incident_notification_template_array import IncidentNotificationTemplateArray from datadog_api_client.v2.model.incident_notification_template import IncidentNotificationTemplate from datadog_api_client.v2.model.create_incident_notification_template_request import ( @@ -113,6 +117,26 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._create_incident_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-rules", + "operation_id": "create_incident_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateIncidentNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["application/json"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._create_incident_notification_template_endpoint = _Endpoint( settings={ "response_type": (IncidentNotificationTemplate,), @@ -231,6 +255,34 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._delete_incident_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-rules/{id}", + "operation_id": "delete_incident_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + self._delete_incident_notification_template_endpoint = _Endpoint( settings={ "response_type": None, @@ -369,6 +421,34 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._get_incident_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-rules/{id}", + "operation_id": "get_incident_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + self._get_incident_notification_template_endpoint = _Endpoint( settings={ "response_type": (IncidentNotificationTemplate,), @@ -507,6 +587,28 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._list_incident_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (IncidentNotificationRuleArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-rules", + "operation_id": "list_incident_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + self._list_incident_notification_templates_endpoint = _Endpoint( settings={ "response_type": (IncidentNotificationTemplateArray,), @@ -751,6 +853,37 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._update_incident_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-rules/{id}", + "operation_id": "update_incident_notification_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PutIncidentNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["application/json"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._update_incident_notification_template_endpoint = _Endpoint( settings={ "response_type": (IncidentNotificationTemplate,), @@ -879,6 +1012,22 @@ def create_incident_integration( return self._create_incident_integration_endpoint.call_with_http_info(**kwargs) + def create_incident_notification_rule( + self, + body: CreateIncidentNotificationRuleRequest, + ) -> IncidentNotificationRule: + """Create an incident notification rule. + + Creates a new notification rule. + + :type body: CreateIncidentNotificationRuleRequest + :rtype: IncidentNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_notification_rule_endpoint.call_with_http_info(**kwargs) + def create_incident_notification_template( self, body: CreateIncidentNotificationTemplateRequest, @@ -973,6 +1122,30 @@ def delete_incident_integration( return self._delete_incident_integration_endpoint.call_with_http_info(**kwargs) + def delete_incident_notification_rule( + self, + id: UUID, + *, + include: Union[str, UnsetType] = unset, + ) -> None: + """Delete an incident notification rule. + + Deletes a notification rule by its ID. + + :param id: The ID of the notification rule. + :type id: UUID + :param include: Comma-separated list of resources to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` , ``notification_template`` + :type include: str, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if include is not unset: + kwargs["include"] = include + + return self._delete_incident_notification_rule_endpoint.call_with_http_info(**kwargs) + def delete_incident_notification_template( self, id: UUID, @@ -1082,6 +1255,30 @@ def get_incident_integration( return self._get_incident_integration_endpoint.call_with_http_info(**kwargs) + def get_incident_notification_rule( + self, + id: UUID, + *, + include: Union[str, UnsetType] = unset, + ) -> IncidentNotificationRule: + """Get an incident notification rule. + + Retrieves a specific notification rule by its ID. + + :param id: The ID of the notification rule. + :type id: UUID + :param include: Comma-separated list of resources to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` , ``notification_template`` + :type include: str, optional + :rtype: IncidentNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if include is not unset: + kwargs["include"] = include + + return self._get_incident_notification_rule_endpoint.call_with_http_info(**kwargs) + def get_incident_notification_template( self, id: UUID, @@ -1192,6 +1389,25 @@ def list_incident_integrations( return self._list_incident_integrations_endpoint.call_with_http_info(**kwargs) + def list_incident_notification_rules( + self, + *, + include: Union[str, UnsetType] = unset, + ) -> IncidentNotificationRuleArray: + """List incident notification rules. + + Lists all notification rules for the organization. Optionally filter by incident type. + + :param include: Comma-separated list of resources to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` , ``notification_template`` + :type include: str, optional + :rtype: IncidentNotificationRuleArray + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + return self._list_incident_notification_rules_endpoint.call_with_http_info(**kwargs) + def list_incident_notification_templates( self, *, @@ -1512,6 +1728,34 @@ def update_incident_integration( return self._update_incident_integration_endpoint.call_with_http_info(**kwargs) + def update_incident_notification_rule( + self, + id: UUID, + body: PutIncidentNotificationRuleRequest, + *, + include: Union[str, UnsetType] = unset, + ) -> IncidentNotificationRule: + """Update an incident notification rule. + + Updates an existing notification rule with a complete replacement. + + :param id: The ID of the notification rule. + :type id: UUID + :type body: PutIncidentNotificationRuleRequest + :param include: Comma-separated list of resources to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` , ``notification_template`` + :type include: str, optional + :rtype: IncidentNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_notification_rule_endpoint.call_with_http_info(**kwargs) + def update_incident_notification_template( self, id: UUID, diff --git a/src/datadog_api_client/v2/model/create_incident_notification_rule_request.py b/src/datadog_api_client/v2/model/create_incident_notification_rule_request.py new file mode 100644 index 0000000000..f2867d037c --- /dev/null +++ b/src/datadog_api_client/v2/model/create_incident_notification_rule_request.py @@ -0,0 +1,42 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_create_data import IncidentNotificationRuleCreateData + + +class CreateIncidentNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_create_data import ( + IncidentNotificationRuleCreateData, + ) + + return { + "data": (IncidentNotificationRuleCreateData,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentNotificationRuleCreateData, **kwargs): + """ + Create request for a notification rule. + + :param data: Notification rule data for a create request. + :type data: IncidentNotificationRuleCreateData + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/incident_notification_rule.py b/src/datadog_api_client/v2/model/incident_notification_rule.py new file mode 100644 index 0000000000..8a7c211add --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule.py @@ -0,0 +1,74 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_response_data import ( + IncidentNotificationRuleResponseData, + ) + from datadog_api_client.v2.model.incident_notification_rule_included_items import ( + IncidentNotificationRuleIncludedItems, + ) + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + from datadog_api_client.v2.model.incident_notification_template_object import IncidentNotificationTemplateObject + + +class IncidentNotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_response_data import ( + IncidentNotificationRuleResponseData, + ) + from datadog_api_client.v2.model.incident_notification_rule_included_items import ( + IncidentNotificationRuleIncludedItems, + ) + + return { + "data": (IncidentNotificationRuleResponseData,), + "included": ([IncidentNotificationRuleIncludedItems],), + } + + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__( + self_, + data: IncidentNotificationRuleResponseData, + included: Union[ + List[ + Union[ + IncidentNotificationRuleIncludedItems, User, IncidentTypeObject, IncidentNotificationTemplateObject + ] + ], + UnsetType, + ] = unset, + **kwargs, + ): + """ + Response with a notification rule. + + :param data: Notification rule data from a response. + :type data: IncidentNotificationRuleResponseData + + :param included: Related objects that are included in the response. + :type included: [IncidentNotificationRuleIncludedItems], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_array.py b/src/datadog_api_client/v2/model/incident_notification_rule_array.py new file mode 100644 index 0000000000..2ad4ecfe32 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_array.py @@ -0,0 +1,84 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_response_data import ( + IncidentNotificationRuleResponseData, + ) + from datadog_api_client.v2.model.incident_notification_rule_included_items import ( + IncidentNotificationRuleIncludedItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_array_meta import IncidentNotificationRuleArrayMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + from datadog_api_client.v2.model.incident_notification_template_object import IncidentNotificationTemplateObject + + +class IncidentNotificationRuleArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_response_data import ( + IncidentNotificationRuleResponseData, + ) + from datadog_api_client.v2.model.incident_notification_rule_included_items import ( + IncidentNotificationRuleIncludedItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_array_meta import IncidentNotificationRuleArrayMeta + + return { + "data": ([IncidentNotificationRuleResponseData],), + "included": ([IncidentNotificationRuleIncludedItems],), + "meta": (IncidentNotificationRuleArrayMeta,), + } + + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__( + self_, + data: List[IncidentNotificationRuleResponseData], + included: Union[ + List[ + Union[ + IncidentNotificationRuleIncludedItems, User, IncidentTypeObject, IncidentNotificationTemplateObject + ] + ], + UnsetType, + ] = unset, + meta: Union[IncidentNotificationRuleArrayMeta, UnsetType] = unset, + **kwargs, + ): + """ + Response with notification rules. + + :param data: The ``NotificationRuleArray`` ``data``. + :type data: [IncidentNotificationRuleResponseData] + + :param included: Related objects that are included in the response. + :type included: [IncidentNotificationRuleIncludedItems], optional + + :param meta: Response metadata. + :type meta: IncidentNotificationRuleArrayMeta, optional + """ + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_array_meta.py b/src/datadog_api_client/v2/model/incident_notification_rule_array_meta.py new file mode 100644 index 0000000000..877e61fbfa --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_array_meta.py @@ -0,0 +1,46 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_array_meta_page import ( + IncidentNotificationRuleArrayMetaPage, + ) + + +class IncidentNotificationRuleArrayMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_array_meta_page import ( + IncidentNotificationRuleArrayMetaPage, + ) + + return { + "pagination": (IncidentNotificationRuleArrayMetaPage,), + } + + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[IncidentNotificationRuleArrayMetaPage, UnsetType] = unset, **kwargs): + """ + Response metadata. + + :param pagination: Pagination metadata. + :type pagination: IncidentNotificationRuleArrayMetaPage, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.py b/src/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.py new file mode 100644 index 0000000000..6ce238fdc0 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.py @@ -0,0 +1,56 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +class IncidentNotificationRuleArrayMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_offset": (int,), + "offset": (int,), + "size": (int,), + } + + attribute_map = { + "next_offset": "next_offset", + "offset": "offset", + "size": "size", + } + + def __init__( + self_, + next_offset: Union[int, UnsetType] = unset, + offset: Union[int, UnsetType] = unset, + size: Union[int, UnsetType] = unset, + **kwargs, + ): + """ + Pagination metadata. + + :param next_offset: The offset for the next page of results. + :type next_offset: int, optional + + :param offset: The current offset in the results. + :type offset: int, optional + + :param size: The number of results returned per page. + :type size: int, optional + """ + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if size is not unset: + kwargs["size"] = size + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_attributes.py b/src/datadog_api_client/v2/model/incident_notification_rule_attributes.py new file mode 100644 index 0000000000..c3054b16fa --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_attributes.py @@ -0,0 +1,111 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + datetime, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_attributes_visibility import ( + IncidentNotificationRuleAttributesVisibility, + ) + + +class IncidentNotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_attributes_visibility import ( + IncidentNotificationRuleAttributesVisibility, + ) + + return { + "conditions": ([IncidentNotificationRuleConditionsItems],), + "created": (datetime,), + "enabled": (bool,), + "handles": ([str],), + "modified": (datetime,), + "renotify_on": ([str],), + "trigger": (str,), + "visibility": (IncidentNotificationRuleAttributesVisibility,), + } + + attribute_map = { + "conditions": "conditions", + "created": "created", + "enabled": "enabled", + "handles": "handles", + "modified": "modified", + "renotify_on": "renotify_on", + "trigger": "trigger", + "visibility": "visibility", + } + read_only_vars = { + "created", + "modified", + } + + def __init__( + self_, + conditions: List[IncidentNotificationRuleConditionsItems], + created: datetime, + enabled: bool, + handles: List[str], + modified: datetime, + trigger: str, + visibility: IncidentNotificationRuleAttributesVisibility, + renotify_on: Union[List[str], UnsetType] = unset, + **kwargs, + ): + """ + The notification rule's attributes. + + :param conditions: The conditions that trigger this notification rule. + :type conditions: [IncidentNotificationRuleConditionsItems] + + :param created: Timestamp when the notification rule was created. + :type created: datetime + + :param enabled: Whether the notification rule is enabled. + :type enabled: bool + + :param handles: The notification handles (targets) for this rule. + :type handles: [str] + + :param modified: Timestamp when the notification rule was last modified. + :type modified: datetime + + :param renotify_on: List of incident fields that trigger re-notification when changed. + :type renotify_on: [str], optional + + :param trigger: The trigger event for this notification rule. + :type trigger: str + + :param visibility: The visibility of the notification rule. + :type visibility: IncidentNotificationRuleAttributesVisibility + """ + if renotify_on is not unset: + kwargs["renotify_on"] = renotify_on + super().__init__(kwargs) + + self_.conditions = conditions + self_.created = created + self_.enabled = enabled + self_.handles = handles + self_.modified = modified + self_.trigger = trigger + self_.visibility = visibility diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.py b/src/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.py new file mode 100644 index 0000000000..af8795546a --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.py @@ -0,0 +1,41 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IncidentNotificationRuleAttributesVisibility(ModelSimple): + """ + The visibility of the notification rule. + + :param value: Must be one of ["all", "organization", "private"]. + :type value: str + """ + + allowed_values = { + "all", + "organization", + "private", + } + ALL: ClassVar["IncidentNotificationRuleAttributesVisibility"] + ORGANIZATION: ClassVar["IncidentNotificationRuleAttributesVisibility"] + PRIVATE: ClassVar["IncidentNotificationRuleAttributesVisibility"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IncidentNotificationRuleAttributesVisibility.ALL = IncidentNotificationRuleAttributesVisibility("all") +IncidentNotificationRuleAttributesVisibility.ORGANIZATION = IncidentNotificationRuleAttributesVisibility("organization") +IncidentNotificationRuleAttributesVisibility.PRIVATE = IncidentNotificationRuleAttributesVisibility("private") diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_conditions_items.py b/src/datadog_api_client/v2/model/incident_notification_rule_conditions_items.py new file mode 100644 index 0000000000..90b9e3a65f --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_conditions_items.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +class IncidentNotificationRuleConditionsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "values": ([str],), + } + + attribute_map = { + "field": "field", + "values": "values", + } + + def __init__(self_, field: str, values: List[str], **kwargs): + """ + A condition that must be met to trigger the notification rule. + + :param field: The incident field to evaluate + :type field: str + + :param values: The value(s) to compare against. Multiple values are ``ORed`` together. + :type values: [str] + """ + super().__init__(kwargs) + + self_.field = field + self_.values = values diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py b/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py new file mode 100644 index 0000000000..92002c7465 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py @@ -0,0 +1,94 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, + ) + + +class IncidentNotificationRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, + ) + + return { + "conditions": ([IncidentNotificationRuleConditionsItems],), + "enabled": (bool,), + "handles": ([str],), + "renotify_on": ([str],), + "trigger": (str,), + "visibility": (IncidentNotificationRuleCreateAttributesVisibility,), + } + + attribute_map = { + "conditions": "conditions", + "enabled": "enabled", + "handles": "handles", + "renotify_on": "renotify_on", + "trigger": "trigger", + "visibility": "visibility", + } + + def __init__( + self_, + conditions: List[IncidentNotificationRuleConditionsItems], + handles: List[str], + trigger: str, + enabled: Union[bool, UnsetType] = unset, + renotify_on: Union[List[str], UnsetType] = unset, + visibility: Union[IncidentNotificationRuleCreateAttributesVisibility, UnsetType] = unset, + **kwargs, + ): + """ + The attributes for creating a notification rule. + + :param conditions: The conditions that trigger this notification rule. + :type conditions: [IncidentNotificationRuleConditionsItems] + + :param enabled: Whether the notification rule is enabled. + :type enabled: bool, optional + + :param handles: The notification handles (targets) for this rule. + :type handles: [str] + + :param renotify_on: List of incident fields that trigger re-notification when changed. + :type renotify_on: [str], optional + + :param trigger: The trigger event for this notification rule. + :type trigger: str + + :param visibility: The visibility of the notification rule. + :type visibility: IncidentNotificationRuleCreateAttributesVisibility, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if renotify_on is not unset: + kwargs["renotify_on"] = renotify_on + if visibility is not unset: + kwargs["visibility"] = visibility + super().__init__(kwargs) + + self_.conditions = conditions + self_.handles = handles + self_.trigger = trigger diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.py b/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.py new file mode 100644 index 0000000000..25ba20f6b6 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.py @@ -0,0 +1,45 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IncidentNotificationRuleCreateAttributesVisibility(ModelSimple): + """ + The visibility of the notification rule. + + :param value: Must be one of ["all", "organization", "private"]. + :type value: str + """ + + allowed_values = { + "all", + "organization", + "private", + } + ALL: ClassVar["IncidentNotificationRuleCreateAttributesVisibility"] + ORGANIZATION: ClassVar["IncidentNotificationRuleCreateAttributesVisibility"] + PRIVATE: ClassVar["IncidentNotificationRuleCreateAttributesVisibility"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IncidentNotificationRuleCreateAttributesVisibility.ALL = IncidentNotificationRuleCreateAttributesVisibility("all") +IncidentNotificationRuleCreateAttributesVisibility.ORGANIZATION = IncidentNotificationRuleCreateAttributesVisibility( + "organization" +) +IncidentNotificationRuleCreateAttributesVisibility.PRIVATE = IncidentNotificationRuleCreateAttributesVisibility( + "private" +) diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_create_data.py b/src/datadog_api_client/v2/model/incident_notification_rule_create_data.py new file mode 100644 index 0000000000..589e79cd91 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_create_data.py @@ -0,0 +1,73 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + +class IncidentNotificationRuleCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + return { + "attributes": (IncidentNotificationRuleCreateAttributes,), + "relationships": (IncidentNotificationRuleCreateDataRelationships,), + "type": (IncidentNotificationRuleType,), + } + + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__( + self_, + attributes: IncidentNotificationRuleCreateAttributes, + type: IncidentNotificationRuleType, + relationships: Union[IncidentNotificationRuleCreateDataRelationships, UnsetType] = unset, + **kwargs, + ): + """ + Notification rule data for a create request. + + :param attributes: The attributes for creating a notification rule. + :type attributes: IncidentNotificationRuleCreateAttributes + + :param relationships: The definition of ``NotificationRuleCreateDataRelationships`` object. + :type relationships: IncidentNotificationRuleCreateDataRelationships, optional + + :param type: Notification rules resource type. + :type type: IncidentNotificationRuleType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + self_.attributes = attributes + self_.type = type diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py b/src/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py new file mode 100644 index 0000000000..072fd32f36 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py @@ -0,0 +1,60 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, + ) + + +class IncidentNotificationRuleCreateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, + ) + + return { + "incident_type": (RelationshipToIncidentType,), + "notification_template": (RelationshipToIncidentNotificationTemplate,), + } + + attribute_map = { + "incident_type": "incident_type", + "notification_template": "notification_template", + } + + def __init__( + self_, + incident_type: Union[RelationshipToIncidentType, UnsetType] = unset, + notification_template: Union[RelationshipToIncidentNotificationTemplate, UnsetType] = unset, + **kwargs, + ): + """ + The definition of ``NotificationRuleCreateDataRelationships`` object. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType, optional + + :param notification_template: A relationship reference to a notification template. + :type notification_template: RelationshipToIncidentNotificationTemplate, optional + """ + if incident_type is not unset: + kwargs["incident_type"] = incident_type + if notification_template is not unset: + kwargs["notification_template"] = notification_template + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_included_items.py b/src/datadog_api_client/v2/model/incident_notification_rule_included_items.py new file mode 100644 index 0000000000..a96e8e9390 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_included_items.py @@ -0,0 +1,51 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelComposed, + cached_property, +) + + +class IncidentNotificationRuleIncludedItems(ModelComposed): + def __init__(self, **kwargs): + """ + Objects related to a notification rule. + + :param attributes: Attributes of user object returned by the API. + :type attributes: UserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param relationships: Relationships of the user object returned by the API. + :type relationships: UserResponseRelationships, optional + + :param type: Users resource type. + :type type: UsersType, optional + """ + super().__init__(kwargs) + + @cached_property + def _composed_schemas(_): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error because the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + from datadog_api_client.v2.model.incident_notification_template_object import IncidentNotificationTemplateObject + + return { + "oneOf": [ + User, + IncidentTypeObject, + IncidentNotificationTemplateObject, + ], + } diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_relationships.py b/src/datadog_api_client/v2/model/incident_notification_rule_relationships.py new file mode 100644 index 0000000000..f1c0a78ea4 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_relationships.py @@ -0,0 +1,78 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, + ) + + +class IncidentNotificationRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, + ) + + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + "notification_template": (RelationshipToIncidentNotificationTemplate,), + } + + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + "notification_template": "notification_template", + } + + def __init__( + self_, + created_by_user: Union[RelationshipToUser, UnsetType] = unset, + incident_type: Union[RelationshipToIncidentType, UnsetType] = unset, + last_modified_by_user: Union[RelationshipToUser, UnsetType] = unset, + notification_template: Union[RelationshipToIncidentNotificationTemplate, UnsetType] = unset, + **kwargs, + ): + """ + The notification rule's resource relationships. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + + :param notification_template: A relationship reference to a notification template. + :type notification_template: RelationshipToIncidentNotificationTemplate, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if incident_type is not unset: + kwargs["incident_type"] = incident_type + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if notification_template is not unset: + kwargs["notification_template"] = notification_template + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_response_data.py b/src/datadog_api_client/v2/model/incident_notification_rule_response_data.py new file mode 100644 index 0000000000..cb66e085a4 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_response_data.py @@ -0,0 +1,78 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_attributes import IncidentNotificationRuleAttributes + from datadog_api_client.v2.model.incident_notification_rule_relationships import ( + IncidentNotificationRuleRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + +class IncidentNotificationRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_attributes import IncidentNotificationRuleAttributes + from datadog_api_client.v2.model.incident_notification_rule_relationships import ( + IncidentNotificationRuleRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + return { + "attributes": (IncidentNotificationRuleAttributes,), + "id": (UUID,), + "relationships": (IncidentNotificationRuleRelationships,), + "type": (IncidentNotificationRuleType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__( + self_, + id: UUID, + type: IncidentNotificationRuleType, + attributes: Union[IncidentNotificationRuleAttributes, UnsetType] = unset, + relationships: Union[IncidentNotificationRuleRelationships, UnsetType] = unset, + **kwargs, + ): + """ + Notification rule data from a response. + + :param attributes: The notification rule's attributes. + :type attributes: IncidentNotificationRuleAttributes, optional + + :param id: The unique identifier of the notification rule. + :type id: UUID + + :param relationships: The notification rule's resource relationships. + :type relationships: IncidentNotificationRuleRelationships, optional + + :param type: Notification rules resource type. + :type type: IncidentNotificationRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_type.py b/src/datadog_api_client/v2/model/incident_notification_rule_type.py new file mode 100644 index 0000000000..c36645e86b --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_type.py @@ -0,0 +1,35 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IncidentNotificationRuleType(ModelSimple): + """ + Notification rules resource type. + + :param value: If omitted defaults to "incident_notification_rules". Must be one of ["incident_notification_rules"]. + :type value: str + """ + + allowed_values = { + "incident_notification_rules", + } + INCIDENT_NOTIFICATION_RULES: ClassVar["IncidentNotificationRuleType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IncidentNotificationRuleType.INCIDENT_NOTIFICATION_RULES = IncidentNotificationRuleType("incident_notification_rules") diff --git a/src/datadog_api_client/v2/model/incident_notification_rule_update_data.py b/src/datadog_api_client/v2/model/incident_notification_rule_update_data.py new file mode 100644 index 0000000000..30b595e355 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_rule_update_data.py @@ -0,0 +1,81 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + +class IncidentNotificationRuleUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, + ) + from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType + + return { + "attributes": (IncidentNotificationRuleCreateAttributes,), + "id": (UUID,), + "relationships": (IncidentNotificationRuleCreateDataRelationships,), + "type": (IncidentNotificationRuleType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__( + self_, + attributes: IncidentNotificationRuleCreateAttributes, + id: UUID, + type: IncidentNotificationRuleType, + relationships: Union[IncidentNotificationRuleCreateDataRelationships, UnsetType] = unset, + **kwargs, + ): + """ + Notification rule data for an update request. + + :param attributes: The attributes for creating a notification rule. + :type attributes: IncidentNotificationRuleCreateAttributes + + :param id: The unique identifier of the notification rule. + :type id: UUID + + :param relationships: The definition of ``NotificationRuleCreateDataRelationships`` object. + :type relationships: IncidentNotificationRuleCreateDataRelationships, optional + + :param type: Notification rules resource type. + :type type: IncidentNotificationRuleType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/model/incident_notification_template_object.py b/src/datadog_api_client/v2/model/incident_notification_template_object.py new file mode 100644 index 0000000000..bd9d40a767 --- /dev/null +++ b/src/datadog_api_client/v2/model/incident_notification_template_object.py @@ -0,0 +1,82 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_attributes import ( + IncidentNotificationTemplateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_template_relationships import ( + IncidentNotificationTemplateRelationships, + ) + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + + +class IncidentNotificationTemplateObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_attributes import ( + IncidentNotificationTemplateAttributes, + ) + from datadog_api_client.v2.model.incident_notification_template_relationships import ( + IncidentNotificationTemplateRelationships, + ) + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + + return { + "attributes": (IncidentNotificationTemplateAttributes,), + "id": (UUID,), + "relationships": (IncidentNotificationTemplateRelationships,), + "type": (IncidentNotificationTemplateType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__( + self_, + id: UUID, + type: IncidentNotificationTemplateType, + attributes: Union[IncidentNotificationTemplateAttributes, UnsetType] = unset, + relationships: Union[IncidentNotificationTemplateRelationships, UnsetType] = unset, + **kwargs, + ): + """ + A notification template object for inclusion in other resources. + + :param attributes: The notification template's attributes. + :type attributes: IncidentNotificationTemplateAttributes, optional + + :param id: The unique identifier of the notification template. + :type id: UUID + + :param relationships: The notification template's resource relationships. + :type relationships: IncidentNotificationTemplateRelationships, optional + + :param type: Notification templates resource type. + :type type: IncidentNotificationTemplateType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/model/put_incident_notification_rule_request.py b/src/datadog_api_client/v2/model/put_incident_notification_rule_request.py new file mode 100644 index 0000000000..6574b5a5a0 --- /dev/null +++ b/src/datadog_api_client/v2/model/put_incident_notification_rule_request.py @@ -0,0 +1,42 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_rule_update_data import IncidentNotificationRuleUpdateData + + +class PutIncidentNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_rule_update_data import ( + IncidentNotificationRuleUpdateData, + ) + + return { + "data": (IncidentNotificationRuleUpdateData,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentNotificationRuleUpdateData, **kwargs): + """ + Put request for a notification rule. + + :param data: Notification rule data for an update request. + :type data: IncidentNotificationRuleUpdateData + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/relationship_to_incident_notification_template.py b/src/datadog_api_client/v2/model/relationship_to_incident_notification_template.py new file mode 100644 index 0000000000..1b530895a7 --- /dev/null +++ b/src/datadog_api_client/v2/model/relationship_to_incident_notification_template.py @@ -0,0 +1,44 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_notification_template_data import ( + RelationshipToIncidentNotificationTemplateData, + ) + + +class RelationshipToIncidentNotificationTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_notification_template_data import ( + RelationshipToIncidentNotificationTemplateData, + ) + + return { + "data": (RelationshipToIncidentNotificationTemplateData,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToIncidentNotificationTemplateData, **kwargs): + """ + A relationship reference to a notification template. + + :param data: The notification template relationship data. + :type data: RelationshipToIncidentNotificationTemplateData + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.py b/src/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.py new file mode 100644 index 0000000000..bd310e5285 --- /dev/null +++ b/src/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.py @@ -0,0 +1,47 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + + +class RelationshipToIncidentNotificationTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + + return { + "id": (UUID,), + "type": (IncidentNotificationTemplateType,), + } + + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentNotificationTemplateType, **kwargs): + """ + The notification template relationship data. + + :param id: The unique identifier of the notification template. + :type id: UUID + + :param type: Notification templates resource type. + :type type: IncidentNotificationTemplateType + """ + super().__init__(kwargs) + + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index a8f77cf9ee..e82a684d1f 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -803,6 +803,7 @@ CreateDataDeletionRequestBodyDataType, ) from datadog_api_client.v2.model.create_data_deletion_response_body import CreateDataDeletionResponseBody +from datadog_api_client.v2.model.create_incident_notification_rule_request import CreateIncidentNotificationRuleRequest from datadog_api_client.v2.model.create_incident_notification_template_request import ( CreateIncidentNotificationTemplateRequest, ) @@ -1574,6 +1575,32 @@ from datadog_api_client.v2.model.incident_integration_relationships import IncidentIntegrationRelationships from datadog_api_client.v2.model.incident_non_datadog_creator import IncidentNonDatadogCreator from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle +from datadog_api_client.v2.model.incident_notification_rule import IncidentNotificationRule +from datadog_api_client.v2.model.incident_notification_rule_array import IncidentNotificationRuleArray +from datadog_api_client.v2.model.incident_notification_rule_array_meta import IncidentNotificationRuleArrayMeta +from datadog_api_client.v2.model.incident_notification_rule_array_meta_page import IncidentNotificationRuleArrayMetaPage +from datadog_api_client.v2.model.incident_notification_rule_attributes import IncidentNotificationRuleAttributes +from datadog_api_client.v2.model.incident_notification_rule_attributes_visibility import ( + IncidentNotificationRuleAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_conditions_items import ( + IncidentNotificationRuleConditionsItems, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes import ( + IncidentNotificationRuleCreateAttributes, +) +from datadog_api_client.v2.model.incident_notification_rule_create_attributes_visibility import ( + IncidentNotificationRuleCreateAttributesVisibility, +) +from datadog_api_client.v2.model.incident_notification_rule_create_data import IncidentNotificationRuleCreateData +from datadog_api_client.v2.model.incident_notification_rule_create_data_relationships import ( + IncidentNotificationRuleCreateDataRelationships, +) +from datadog_api_client.v2.model.incident_notification_rule_included_items import IncidentNotificationRuleIncludedItems +from datadog_api_client.v2.model.incident_notification_rule_relationships import IncidentNotificationRuleRelationships +from datadog_api_client.v2.model.incident_notification_rule_response_data import IncidentNotificationRuleResponseData +from datadog_api_client.v2.model.incident_notification_rule_type import IncidentNotificationRuleType +from datadog_api_client.v2.model.incident_notification_rule_update_data import IncidentNotificationRuleUpdateData from datadog_api_client.v2.model.incident_notification_template import IncidentNotificationTemplate from datadog_api_client.v2.model.incident_notification_template_array import IncidentNotificationTemplateArray from datadog_api_client.v2.model.incident_notification_template_array_meta import IncidentNotificationTemplateArrayMeta @@ -1593,6 +1620,7 @@ from datadog_api_client.v2.model.incident_notification_template_included_items import ( IncidentNotificationTemplateIncludedItems, ) +from datadog_api_client.v2.model.incident_notification_template_object import IncidentNotificationTemplateObject from datadog_api_client.v2.model.incident_notification_template_relationships import ( IncidentNotificationTemplateRelationships, ) @@ -2957,6 +2985,7 @@ from datadog_api_client.v2.model.projected_cost_type import ProjectedCostType from datadog_api_client.v2.model.projects_response import ProjectsResponse from datadog_api_client.v2.model.publish_app_response import PublishAppResponse +from datadog_api_client.v2.model.put_incident_notification_rule_request import PutIncidentNotificationRuleRequest from datadog_api_client.v2.model.query import Query from datadog_api_client.v2.model.query_formula import QueryFormula from datadog_api_client.v2.model.query_sort_order import QuerySortOrder @@ -3042,6 +3071,12 @@ from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import ( RelationshipToIncidentIntegrationMetadatas, ) +from datadog_api_client.v2.model.relationship_to_incident_notification_template import ( + RelationshipToIncidentNotificationTemplate, +) +from datadog_api_client.v2.model.relationship_to_incident_notification_template_data import ( + RelationshipToIncidentNotificationTemplateData, +) from datadog_api_client.v2.model.relationship_to_incident_postmortem import RelationshipToIncidentPostmortem from datadog_api_client.v2.model.relationship_to_incident_postmortem_data import RelationshipToIncidentPostmortemData from datadog_api_client.v2.model.relationship_to_incident_responder_data import RelationshipToIncidentResponderData @@ -4702,6 +4737,7 @@ "CreateDataDeletionRequestBodyData", "CreateDataDeletionRequestBodyDataType", "CreateDataDeletionResponseBody", + "CreateIncidentNotificationRuleRequest", "CreateIncidentNotificationTemplateRequest", "CreateNotificationRuleParameters", "CreateNotificationRuleParametersData", @@ -5307,6 +5343,22 @@ "IncidentIntegrationRelationships", "IncidentNonDatadogCreator", "IncidentNotificationHandle", + "IncidentNotificationRule", + "IncidentNotificationRuleArray", + "IncidentNotificationRuleArrayMeta", + "IncidentNotificationRuleArrayMetaPage", + "IncidentNotificationRuleAttributes", + "IncidentNotificationRuleAttributesVisibility", + "IncidentNotificationRuleConditionsItems", + "IncidentNotificationRuleCreateAttributes", + "IncidentNotificationRuleCreateAttributesVisibility", + "IncidentNotificationRuleCreateData", + "IncidentNotificationRuleCreateDataRelationships", + "IncidentNotificationRuleIncludedItems", + "IncidentNotificationRuleRelationships", + "IncidentNotificationRuleResponseData", + "IncidentNotificationRuleType", + "IncidentNotificationRuleUpdateData", "IncidentNotificationTemplate", "IncidentNotificationTemplateArray", "IncidentNotificationTemplateArrayMeta", @@ -5316,6 +5368,7 @@ "IncidentNotificationTemplateCreateData", "IncidentNotificationTemplateCreateDataRelationships", "IncidentNotificationTemplateIncludedItems", + "IncidentNotificationTemplateObject", "IncidentNotificationTemplateRelationships", "IncidentNotificationTemplateResponseData", "IncidentNotificationTemplateType", @@ -6200,6 +6253,7 @@ "ProjectedCostType", "ProjectsResponse", "PublishAppResponse", + "PutIncidentNotificationRuleRequest", "Query", "QueryFormula", "QuerySortOrder", @@ -6279,6 +6333,8 @@ "RelationshipToIncidentImpacts", "RelationshipToIncidentIntegrationMetadataData", "RelationshipToIncidentIntegrationMetadatas", + "RelationshipToIncidentNotificationTemplate", + "RelationshipToIncidentNotificationTemplateData", "RelationshipToIncidentPostmortem", "RelationshipToIncidentPostmortemData", "RelationshipToIncidentResponderData", diff --git a/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.frozen new file mode 100644 index 0000000000..275d1a8232 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:08.891Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.yaml new file mode 100644 index 0000000000..321a85ecaf --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_bad_request_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"00000000-0000-0000-0000-000000000000","type":"incident_types"}}},"type":"invalid_type"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"errors":[{"status":"400","title":"Bad Request","detail":"got type + \"invalid_type\" expected one of \"incident_notification_rules\""}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.frozen new file mode 100644 index 0000000000..67baa5efb4 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:09.032Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.yaml new file mode 100644 index 0000000000..9bad8c7e99 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_incident_notification_rule_returns_created_response.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: '{"data":{"attributes":{"description":"Any incidents that harm (or have + the potential to) the confidentiality, integrity, or availability of our data.","is_default":false,"name":"Security + Incident"},"type":"incident_types"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/types + response: + body: + string: '{"data":{"id":"107e7ed1-ec07-483f-a723-882ce86702ba","type":"incident_types","attributes":{"createdAt":"2025-09-09T18:32:09.112896114Z","createdBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","description":"Any + incidents that harm (or have the potential to) the confidentiality, integrity, + or availability of our data.","is_default":false,"lastModifiedBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","modifiedAt":"2025-09-09T18:32:09.112896213Z","name":"Security + Incident","prefix":"IR"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"google_meet_configuration":{"data":null},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"microsoft_teams_configuration":{"data":null},"zoom_configuration":{"data":null}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"107e7ed1-ec07-483f-a723-882ce86702ba","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":{"id":"93dada9a-d032-49a4-b445-0673aaebb888","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:09.321517146Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:09.321517146Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"107e7ed1-ec07-483f-a723-882ce86702ba","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/93dada9a-d032-49a4-b445-0673aaebb888 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/types/107e7ed1-ec07-483f-a723-882ce86702ba + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.frozen new file mode 100644 index 0000000000..86eba7dd7a --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:13.145Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.yaml new file mode 100644 index 0000000000..ebb37b93bd --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_no_content_response.yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: '{"data":{"attributes":{"description":"Any incidents that harm (or have + the potential to) the confidentiality, integrity, or availability of our data.","is_default":false,"name":"Security + Incident"},"type":"incident_types"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/types + response: + body: + string: '{"data":{"id":"ad9ae59d-b9ce-494b-98b2-326fbcc804b9","type":"incident_types","attributes":{"createdAt":"2025-09-09T18:32:13.227280334Z","createdBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","description":"Any + incidents that harm (or have the potential to) the confidentiality, integrity, + or availability of our data.","is_default":false,"lastModifiedBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","modifiedAt":"2025-09-09T18:32:13.227280425Z","name":"Security + Incident","prefix":"IR"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"google_meet_configuration":{"data":null},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"microsoft_teams_configuration":{"data":null},"zoom_configuration":{"data":null}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"ad9ae59d-b9ce-494b-98b2-326fbcc804b9","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":{"id":"dc55d64f-6897-49b0-93b7-d2a34b010cab","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:13.449216494Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:13.449216494Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"ad9ae59d-b9ce-494b-98b2-326fbcc804b9","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/dc55d64f-6897-49b0-93b7-d2a34b010cab + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/dc55d64f-6897-49b0-93b7-d2a34b010cab + response: + body: + string: '{"errors":[{"title":"Generic Error","detail":"rule not found"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/types/ad9ae59d-b9ce-494b-98b2-326fbcc804b9 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.frozen new file mode 100644 index 0000000000..f82ca34002 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:13.827Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.yaml new file mode 100644 index 0000000000..bf6dbe52c1 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_incident_notification_rule_returns_not_found_response.yaml @@ -0,0 +1,18 @@ +interactions: +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001 + response: + body: + string: '{"errors":[{"title":"Generic Error","detail":"rule not found"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.frozen new file mode 100644 index 0000000000..a527f34151 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:20.351Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.yaml new file mode 100644 index 0000000000..06d2d0c9b4 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_not_found_response.yaml @@ -0,0 +1,18 @@ +interactions: +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001 + response: + body: + string: '{"errors":[{"title":"Generic Error","detail":"rule not found"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.frozen new file mode 100644 index 0000000000..b5df2e3ca9 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:20.427Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.yaml new file mode 100644 index 0000000000..d9be177bd4 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_incident_notification_rule_returns_ok_response.yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: '{"data":{"attributes":{"description":"Any incidents that harm (or have + the potential to) the confidentiality, integrity, or availability of our data.","is_default":false,"name":"Security + Incident"},"type":"incident_types"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/types + response: + body: + string: '{"data":{"id":"ba3134f6-c17f-415b-8023-776f53667031","type":"incident_types","attributes":{"createdAt":"2025-09-09T18:32:20.515024463Z","createdBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","description":"Any + incidents that harm (or have the potential to) the confidentiality, integrity, + or availability of our data.","is_default":false,"lastModifiedBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","modifiedAt":"2025-09-09T18:32:20.515024553Z","name":"Security + Incident","prefix":"IR"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"google_meet_configuration":{"data":null},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"microsoft_teams_configuration":{"data":null},"zoom_configuration":{"data":null}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"ba3134f6-c17f-415b-8023-776f53667031","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":{"id":"d364309f-e1ee-4bdb-a6a2-508c21601f5d","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:20.702950616Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:20.702950616Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"ba3134f6-c17f-415b-8023-776f53667031","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/d364309f-e1ee-4bdb-a6a2-508c21601f5d + response: + body: + string: '{"data":{"id":"d364309f-e1ee-4bdb-a6a2-508c21601f5d","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:20.70295Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:20.70295Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"ba3134f6-c17f-415b-8023-776f53667031","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/d364309f-e1ee-4bdb-a6a2-508c21601f5d + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/types/ba3134f6-c17f-415b-8023-776f53667031 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.frozen new file mode 100644 index 0000000000..188351a15b --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:22.504Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.yaml new file mode 100644 index 0000000000..5375b621dc --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_list_incident_notification_rules_returns_ok_response.yaml @@ -0,0 +1,87 @@ +interactions: +- request: + body: '{"data":{"attributes":{"description":"Any incidents that harm (or have + the potential to) the confidentiality, integrity, or availability of our data.","is_default":false,"name":"Security + Incident"},"type":"incident_types"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/types + response: + body: + string: '{"data":{"id":"33eb6b19-1034-4233-9bfa-03e4ffbc18ca","type":"incident_types","attributes":{"createdAt":"2025-09-09T18:32:22.588970617Z","createdBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","description":"Any + incidents that harm (or have the potential to) the confidentiality, integrity, + or availability of our data.","is_default":false,"lastModifiedBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","modifiedAt":"2025-09-09T18:32:22.588970732Z","name":"Security + Incident","prefix":"IR"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"google_meet_configuration":{"data":null},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"microsoft_teams_configuration":{"data":null},"zoom_configuration":{"data":null}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"33eb6b19-1034-4233-9bfa-03e4ffbc18ca","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":{"id":"94e7cf01-bf6e-4ad5-bb87-e91880318851","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:22.776194917Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:22.776194917Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"33eb6b19-1034-4233-9bfa-03e4ffbc18ca","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":[{"id":"94e7cf01-bf6e-4ad5-bb87-e91880318851","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:22.776194Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:22.776194Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"33eb6b19-1034-4233-9bfa-03e4ffbc18ca","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}],"meta":{"pagination":{"offset":0,"next_offset":1,"size":1}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/94e7cf01-bf6e-4ad5-bb87-e91880318851 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/types/33eb6b19-1034-4233-9bfa-03e4ffbc18ca + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.frozen new file mode 100644 index 0000000000..b4f928015d --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:42.727Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.yaml new file mode 100644 index 0000000000..9d6dd4a833 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_bad_request_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"id":"00000000-0000-0000-0000-000000000001","relationships":{"incident_type":{"data":{"id":"00000000-0000-0000-0000-000000000000","type":"incident_types"}}},"type":"invalid_type"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001 + response: + body: + string: '{"errors":[{"status":"400","title":"Bad Request","detail":"got type + \"invalid_type\" expected one of \"incident_notification_rules\""}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.frozen new file mode 100644 index 0000000000..525cde3609 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:42.804Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.yaml new file mode 100644 index 0000000000..c0475fd8db --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_not_found_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1"]}],"enabled":false,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger"},"id":"00000000-0000-0000-0000-000000000001","relationships":{"incident_type":{"data":{"id":"00000000-0000-0000-0000-000000000001","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001 + response: + body: + string: '{"errors":[{"title":"Generic Error","detail":"incident type doesn''t + exist"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.frozen new file mode 100644 index 0000000000..2f3783d390 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-09-09T18:32:42.885Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.yaml new file mode 100644 index 0000000000..0dd251bd79 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_incident_notification_rule_returns_ok_response.yaml @@ -0,0 +1,89 @@ +interactions: +- request: + body: '{"data":{"attributes":{"description":"Any incidents that harm (or have + the potential to) the confidentiality, integrity, or availability of our data.","is_default":false,"name":"Security + Incident"},"type":"incident_types"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/types + response: + body: + string: '{"data":{"id":"2e166ce6-b249-46d1-8143-5ad4f5dda002","type":"incident_types","attributes":{"createdAt":"2025-09-09T18:32:42.95399842Z","createdBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","description":"Any + incidents that harm (or have the potential to) the confidentiality, integrity, + or availability of our data.","is_default":false,"lastModifiedBy":"3ad549bf-eba0-11e9-a77a-0705486660d0","modifiedAt":"2025-09-09T18:32:42.953998518Z","name":"Security + Incident","prefix":"IR"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"google_meet_configuration":{"data":null},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"microsoft_teams_configuration":{"data":null},"zoom_configuration":{"data":null}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"enabled":true,"handles":["@test-email@company.com"],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"incident_type":{"data":{"id":"2e166ce6-b249-46d1-8143-5ad4f5dda002","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules + response: + body: + string: '{"data":{"id":"01b558a4-32f7-4d4d-b46a-793dca40df48","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1","SEV-2"]}],"created":"2025-09-09T18:32:43.137893329Z","enabled":true,"handles":["@test-email@company.com"],"modified":"2025-09-09T18:32:43.137893329Z","renotify_on":[],"trigger":"incident_created_trigger","visibility":"organization"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"2e166ce6-b249-46d1-8143-5ad4f5dda002","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"conditions":[{"field":"severity","values":["SEV-1"]}],"enabled":false,"handles":["@updated-team-email@company.com"],"trigger":"incident_modified_trigger","visibility":"private"},"id":"01b558a4-32f7-4d4d-b46a-793dca40df48","relationships":{"incident_type":{"data":{"id":"2e166ce6-b249-46d1-8143-5ad4f5dda002","type":"incident_types"}}},"type":"incident_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/01b558a4-32f7-4d4d-b46a-793dca40df48 + response: + body: + string: '{"data":{"id":"01b558a4-32f7-4d4d-b46a-793dca40df48","type":"incident_notification_rules","attributes":{"conditions":[{"field":"severity","values":["SEV-1"]}],"created":"2025-09-09T18:32:43.137893Z","enabled":false,"handles":["@updated-team-email@company.com"],"modified":"2025-09-09T18:32:43.24636504Z","renotify_on":[],"trigger":"incident_modified_trigger","visibility":"private"},"relationships":{"created_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}},"incident_type":{"data":{"id":"2e166ce6-b249-46d1-8143-5ad4f5dda002","type":"incident_types"}},"last_modified_by_user":{"data":{"id":"3ad549bf-eba0-11e9-a77a-0705486660d0","type":"users"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/notification-rules/01b558a4-32f7-4d4d-b46a-793dca40df48 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/incidents/config/types/2e166ce6-b249-46d1-8143-5ad4f5dda002 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/features/given.json b/tests/v2/features/given.json index 2fce716f34..4e0610f2f8 100644 --- a/tests/v2/features/given.json +++ b/tests/v2/features/given.json @@ -249,6 +249,18 @@ "tag": "Incidents", "operationId": "CreateIncident" }, + { + "operationId": "CreateIncidentNotificationRule", + "parameters": [ + { + "name": "body", + "value": "{\n \"data\": {\n \"attributes\": {\n \"conditions\": [{\"field\": \"severity\", \"values\": [\"SEV-1\", \"SEV-2\"]}],\n \"handles\": [\"@test-email@company.com\"],\n \"visibility\": \"organization\",\n \"trigger\": \"incident_created_trigger\",\n \"enabled\": true\n },\n \"relationships\": {\n \"incident_type\": {\n \"data\": {\n \"id\": \"{{ incident_type.data.id }}\",\n \"type\": \"incident_types\"\n }\n }\n },\n \"type\": \"incident_notification_rules\"\n }\n}" + } + ], + "step": "there is a valid \"notification_rule\" in the system", + "key": "notification_rule", + "tag": "Incidents" + }, { "operationId": "CreateIncidentNotificationTemplate", "parameters": [ diff --git a/tests/v2/features/incidents.feature b/tests/v2/features/incidents.feature index f381e2e6f0..4f278f2816 100644 --- a/tests/v2/features/incidents.feature +++ b/tests/v2/features/incidents.feature @@ -66,6 +66,30 @@ Feature: Incidents When the request is sent Then the response status is 404 Not Found + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident notification rule returns "Bad Request" response + Given operation "CreateIncidentNotificationRule" enabled + And new "CreateIncidentNotificationRule" request + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident notification rule returns "Created" response + Given operation "CreateIncidentNotificationRule" enabled + And new "CreateIncidentNotificationRule" request + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident notification rule returns "Not Found" response + Given operation "CreateIncidentNotificationRule" enabled + And new "CreateIncidentNotificationRule" request + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + @generated @skip @team:DataDog/incident-app Scenario: Create an incident returns "Bad Request" response Given operation "CreateIncident" enabled @@ -146,6 +170,26 @@ Feature: Incidents When the request is sent Then the response status is 404 Not Found + @team:Datadog/incident-app + Scenario: Create incident notification rule returns "Bad Request" response + Given operation "CreateIncidentNotificationRule" enabled + And new "CreateIncidentNotificationRule" request + And body with value {"data": {"type": "invalid_type", "attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "handles": ["@test-email@company.com"], "visibility": "organization", "trigger": "incident_created_trigger", "enabled": true}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/incident-app + Scenario: Create incident notification rule returns "Created" response + Given there is a valid "incident_type" in the system + And operation "CreateIncidentNotificationRule" enabled + And new "CreateIncidentNotificationRule" request + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "handles": ["@test-email@company.com"], "visibility": "organization", "trigger": "incident_created_trigger", "enabled": true}, "relationships": {"incident_type": {"data": {"id": "{{ incident_type.data.id }}", "type": "incident_types"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "incident_notification_rules" + And the response "data.attributes.visibility" is equal to "organization" + And the response "data.attributes.enabled" is equal to true + @team:Datadog/incident-app Scenario: Create incident notification template returns "Bad Request" response Given operation "CreateIncidentNotificationTemplate" enabled @@ -280,6 +324,30 @@ Feature: Incidents When the request is sent Then the response status is 204 OK + @generated @skip @team:Datadog/incident-app + Scenario: Delete an incident notification rule returns "Bad Request" response + Given operation "DeleteIncidentNotificationRule" enabled + And new "DeleteIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Delete an incident notification rule returns "No Content" response + Given operation "DeleteIncidentNotificationRule" enabled + And new "DeleteIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:Datadog/incident-app + Scenario: Delete an incident notification rule returns "Not Found" response + Given operation "DeleteIncidentNotificationRule" enabled + And new "DeleteIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + @generated @skip @team:Datadog/incident-app Scenario: Delete an incident todo returns "Bad Request" response Given operation "DeleteIncidentTodo" enabled @@ -334,6 +402,24 @@ Feature: Incidents When the request is sent Then the response status is 204 OK + @team:Datadog/incident-app + Scenario: Delete incident notification rule returns "No Content" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_rule" in the system + And operation "DeleteIncidentNotificationRule" enabled + And new "DeleteIncidentNotificationRule" request + And request contains "id" parameter from "notification_rule.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:Datadog/incident-app + Scenario: Delete incident notification rule returns "Not Found" response + Given operation "DeleteIncidentNotificationRule" enabled + And new "DeleteIncidentNotificationRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + @team:Datadog/incident-app Scenario: Delete incident notification template returns "No Content" response Given there is a valid "incident_type" in the system @@ -470,6 +556,30 @@ Feature: Incidents Then the response status is 200 OK And the response has 3 items + @generated @skip @team:Datadog/incident-app + Scenario: Get an incident notification rule returns "Bad Request" response + Given operation "GetIncidentNotificationRule" enabled + And new "GetIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Get an incident notification rule returns "Not Found" response + Given operation "GetIncidentNotificationRule" enabled + And new "GetIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/incident-app + Scenario: Get an incident notification rule returns "OK" response + Given operation "GetIncidentNotificationRule" enabled + And new "GetIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + @team:DataDog/incident-app Scenario: Get incident attachments returns "OK" response Given operation "ListIncidentAttachments" enabled @@ -513,6 +623,26 @@ Feature: Incidents When the request is sent Then the response status is 200 OK + @team:Datadog/incident-app + Scenario: Get incident notification rule returns "Not Found" response + Given operation "GetIncidentNotificationRule" enabled + And new "GetIncidentNotificationRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/incident-app + Scenario: Get incident notification rule returns "OK" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_rule" in the system + And operation "GetIncidentNotificationRule" enabled + And new "GetIncidentNotificationRule" request + And request contains "id" parameter from "notification_rule.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "incident_notification_rules" + And the response "data.id" has the same value as "notification_rule.data.id" + @generated @skip @team:Datadog/incident-app Scenario: Get incident notification template returns "Bad Request" response Given operation "GetIncidentNotificationTemplate" enabled @@ -624,6 +754,31 @@ Feature: Incidents Then the response status is 200 OK And the response "data.attributes.title" has the same value as "incident.data.attributes.title" + @generated @skip @team:Datadog/incident-app + Scenario: List incident notification rules returns "Bad Request" response + Given operation "ListIncidentNotificationRules" enabled + And new "ListIncidentNotificationRules" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: List incident notification rules returns "Not Found" response + Given operation "ListIncidentNotificationRules" enabled + And new "ListIncidentNotificationRules" request + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/incident-app + Scenario: List incident notification rules returns "OK" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_rule" in the system + And operation "ListIncidentNotificationRules" enabled + And new "ListIncidentNotificationRules" request + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].type" is equal to "incident_notification_rules" + @generated @skip @team:Datadog/incident-app Scenario: List incident notification templates returns "Bad Request" response Given operation "ListIncidentNotificationTemplates" enabled @@ -756,6 +911,33 @@ Feature: Incidents Then the response status is 200 OK And the response "data.attributes.title" is equal to "{{ incident.data.attributes.title }}-updated" + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident notification rule returns "Bad Request" response + Given operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident notification rule returns "Not Found" response + Given operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident notification rule returns "OK" response + Given operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "enabled": true, "handles": ["@team-email@company.com", "@slack-channel"], "renotify_on": ["status", "severity"], "trigger": "incident_created_trigger", "visibility": "organization"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}, "notification_template": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "notification_templates"}}}, "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 200 OK + @generated @skip @team:Datadog/incident-app Scenario: Update an incident todo returns "Bad Request" response Given operation "UpdateIncidentTodo" enabled @@ -818,6 +1000,39 @@ Feature: Incidents When the request is sent Then the response status is 200 OK + @team:Datadog/incident-app + Scenario: Update incident notification rule returns "Bad Request" response + Given operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"type": "invalid_type", "attributes": {"conditions": [{"field": "severity", "values": ["SEV-1", "SEV-2"]}], "handles": ["@test-email@company.com"], "visibility": "organization", "trigger": "incident_created_trigger", "enabled": true}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}}, "id": "00000000-0000-0000-0000-000000000001"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/incident-app + Scenario: Update incident notification rule returns "Not Found" response + Given operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"enabled": false, "conditions": [{"field": "severity", "values": ["SEV-1"]}], "handles": ["@test-email@company.com"], "trigger": "incident_created_trigger"}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "incident_types"}}}, "id": "00000000-0000-0000-0000-000000000001", "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/incident-app + Scenario: Update incident notification rule returns "OK" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_rule" in the system + And operation "UpdateIncidentNotificationRule" enabled + And new "UpdateIncidentNotificationRule" request + And request contains "id" parameter from "notification_rule.data.id" + And body with value {"data": {"attributes": {"enabled": false, "conditions": [{"field": "severity", "values": ["SEV-1"]}], "handles": ["@updated-team-email@company.com"], "visibility": "private", "trigger": "incident_modified_trigger"}, "relationships": {"incident_type": {"data": {"id": "{{ incident_type.data.id }}", "type": "incident_types"}}}, "id": "{{ notification_rule.data.id }}", "type": "incident_notification_rules"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "incident_notification_rules" + And the response "data.id" has the same value as "notification_rule.data.id" + And the response "data.attributes.visibility" is equal to "private" + And the response "data.attributes.enabled" is equal to false + @team:Datadog/incident-app Scenario: Update incident notification template returns "Bad Request" response Given operation "UpdateIncidentNotificationTemplate" enabled diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json index 58051028c2..f9424d938f 100644 --- a/tests/v2/features/undo.json +++ b/tests/v2/features/undo.json @@ -1089,6 +1089,43 @@ "type": "unsafe" } }, + "ListIncidentNotificationRules": { + "tag": "Incidents", + "undo": { + "type": "safe" + } + }, + "CreateIncidentNotificationRule": { + "tag": "Incidents", + "undo": { + "operationId": "DeleteIncidentNotificationRule", + "parameters": [ + { + "name": "id", + "source": "data.id" + } + ], + "type": "unsafe" + } + }, + "DeleteIncidentNotificationRule": { + "tag": "Incidents", + "undo": { + "type": "idempotent" + } + }, + "GetIncidentNotificationRule": { + "tag": "Incidents", + "undo": { + "type": "safe" + } + }, + "UpdateIncidentNotificationRule": { + "tag": "Incidents", + "undo": { + "type": "idempotent" + } + }, "ListIncidentNotificationTemplates": { "tag": "Incidents", "undo": {