diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 73163c4c17..c054fc5351 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -60504,6 +60504,7 @@ components: - $ref: "#/components/schemas/SendSlackMessageAction" - $ref: "#/components/schemas/SendTeamsMessageAction" - $ref: "#/components/schemas/TriggerWorkflowAutomationAction" + - $ref: "#/components/schemas/RoutingRuleEscalationPolicyAction" RoutingRuleAttributes: description: Defines the configurable attributes of a routing rule, such as actions, query, time restriction, and urgency. properties: @@ -60521,6 +60522,52 @@ components: urgency: $ref: "#/components/schemas/Urgency" type: object + RoutingRuleEscalationPolicyAction: + description: "Triggers an escalation policy." + properties: + ack_timeout_minutes: + description: "The number of minutes before an acknowledged page is re-triggered." + example: 30 + format: int64 + type: integer + policy_id: + description: "The ID of the escalation policy to route to." + example: "00000000-0000-0000-0000-000000000000" + type: string + support_hours: + $ref: "#/components/schemas/RoutingRuleEscalationPolicyActionSupportHours" + type: + $ref: "#/components/schemas/RoutingRuleEscalationPolicyActionType" + urgency: + $ref: "#/components/schemas/Urgency" + required: + - type + - policy_id + type: object + RoutingRuleEscalationPolicyActionSupportHours: + description: "Support hours during which the escalation policy will be executed. Outside of these hours, the escalation policy will be on hold and triggered once the next support hours window starts." + properties: + restrictions: + description: "The list of support hours time windows." + items: + $ref: "#/components/schemas/TimeRestriction" + type: array + time_zone: + description: "The time zone in which the support hours are expressed." + example: "" + type: string + required: + - time_zone + type: object + RoutingRuleEscalationPolicyActionType: + default: escalation_policy + description: "Indicates that the action routes to an escalation policy. This action can be set once per routing rule, and cannot be combined with the legacy top-level `policy_id` field on the routing rule." + enum: + - escalation_policy + example: escalation_policy + type: string + x-enum-varnames: + - ESCALATION_POLICY RoutingRuleRelationships: description: Specifies relationships for a routing rule, linking to associated policy resources. properties: diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index e6cb85d7d6..fda6bef848 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -26450,6 +26450,27 @@ datadog\_api\_client.v2.model.routing\_rule\_attributes module :members: :show-inheritance: +datadog\_api\_client.v2.model.routing\_rule\_escalation\_policy\_action module +------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.routing_rule_escalation_policy_action + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.routing\_rule\_escalation\_policy\_action\_support\_hours module +---------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.routing_rule_escalation_policy_action_support_hours + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.routing\_rule\_escalation\_policy\_action\_type module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.routing_rule_escalation_policy_action_type + :members: + :show-inheritance: + datadog\_api\_client.v2.model.routing\_rule\_relationships module ----------------------------------------------------------------- diff --git a/examples/v2/on-call/SetOnCallTeamRoutingRules.py b/examples/v2/on-call/SetOnCallTeamRoutingRules.py index 55c0b0729d..5234f91cb5 100644 --- a/examples/v2/on-call/SetOnCallTeamRoutingRules.py +++ b/examples/v2/on-call/SetOnCallTeamRoutingRules.py @@ -5,8 +5,8 @@ from os import environ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.on_call_api import OnCallApi -from datadog_api_client.v2.model.send_slack_message_action import SendSlackMessageAction -from datadog_api_client.v2.model.send_slack_message_action_type import SendSlackMessageActionType +from datadog_api_client.v2.model.routing_rule_escalation_policy_action import RoutingRuleEscalationPolicyAction +from datadog_api_client.v2.model.routing_rule_escalation_policy_action_type import RoutingRuleEscalationPolicyActionType from datadog_api_client.v2.model.team_routing_rules_request import TeamRoutingRulesRequest from datadog_api_client.v2.model.team_routing_rules_request_data import TeamRoutingRulesRequestData from datadog_api_client.v2.model.team_routing_rules_request_data_attributes import TeamRoutingRulesRequestDataAttributes @@ -29,10 +29,11 @@ rules=[ TeamRoutingRulesRequestRule( actions=[ - SendSlackMessageAction( - channel="channel", - type=SendSlackMessageActionType.SEND_SLACK_MESSAGE, - workspace="workspace", + RoutingRuleEscalationPolicyAction( + type=RoutingRuleEscalationPolicyActionType.ESCALATION_POLICY, + policy_id=ESCALATION_POLICY_DATA_ID, + urgency=Urgency.LOW, + ack_timeout_minutes=30, ), ], query="tags.service:test", diff --git a/src/datadog_api_client/v2/model/routing_rule_action.py b/src/datadog_api_client/v2/model/routing_rule_action.py index 0aa3b0ab54..a19f231e04 100644 --- a/src/datadog_api_client/v2/model/routing_rule_action.py +++ b/src/datadog_api_client/v2/model/routing_rule_action.py @@ -32,6 +32,18 @@ def __init__(self, **kwargs): :param handle: The handle of the Workflow Automation to trigger. :type handle: str + + :param ack_timeout_minutes: The number of minutes before an acknowledged page is re-triggered. + :type ack_timeout_minutes: int, optional + + :param policy_id: The ID of the escalation policy to route to. + :type policy_id: str + + :param support_hours: Support hours during which the escalation policy will be executed. Outside of these hours, the escalation policy will be on hold and triggered once the next support hours window starts. + :type support_hours: RoutingRuleEscalationPolicyActionSupportHours, optional + + :param urgency: Specifies the level of urgency for a routing rule (low, high, or dynamic). + :type urgency: Urgency, optional """ super().__init__(kwargs) @@ -47,11 +59,13 @@ def _composed_schemas(_): from datadog_api_client.v2.model.send_slack_message_action import SendSlackMessageAction from datadog_api_client.v2.model.send_teams_message_action import SendTeamsMessageAction from datadog_api_client.v2.model.trigger_workflow_automation_action import TriggerWorkflowAutomationAction + from datadog_api_client.v2.model.routing_rule_escalation_policy_action import RoutingRuleEscalationPolicyAction return { "oneOf": [ SendSlackMessageAction, SendTeamsMessageAction, TriggerWorkflowAutomationAction, + RoutingRuleEscalationPolicyAction, ], } diff --git a/src/datadog_api_client/v2/model/routing_rule_attributes.py b/src/datadog_api_client/v2/model/routing_rule_attributes.py index 6dcc03a6c4..d9aa0ff72c 100644 --- a/src/datadog_api_client/v2/model/routing_rule_attributes.py +++ b/src/datadog_api_client/v2/model/routing_rule_attributes.py @@ -20,6 +20,7 @@ from datadog_api_client.v2.model.send_slack_message_action import SendSlackMessageAction from datadog_api_client.v2.model.send_teams_message_action import SendTeamsMessageAction from datadog_api_client.v2.model.trigger_workflow_automation_action import TriggerWorkflowAutomationAction + from datadog_api_client.v2.model.routing_rule_escalation_policy_action import RoutingRuleEscalationPolicyAction class RoutingRuleAttributes(ModelNormal): @@ -48,7 +49,11 @@ def __init__( actions: Union[ List[ Union[ - RoutingRuleAction, SendSlackMessageAction, SendTeamsMessageAction, TriggerWorkflowAutomationAction + RoutingRuleAction, + SendSlackMessageAction, + SendTeamsMessageAction, + TriggerWorkflowAutomationAction, + RoutingRuleEscalationPolicyAction, ] ], UnsetType, diff --git a/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py new file mode 100644 index 0000000000..9b3b32aff7 --- /dev/null +++ b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py @@ -0,0 +1,89 @@ +# 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.routing_rule_escalation_policy_action_support_hours import ( + RoutingRuleEscalationPolicyActionSupportHours, + ) + from datadog_api_client.v2.model.routing_rule_escalation_policy_action_type import ( + RoutingRuleEscalationPolicyActionType, + ) + from datadog_api_client.v2.model.urgency import Urgency + + +class RoutingRuleEscalationPolicyAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_escalation_policy_action_support_hours import ( + RoutingRuleEscalationPolicyActionSupportHours, + ) + from datadog_api_client.v2.model.routing_rule_escalation_policy_action_type import ( + RoutingRuleEscalationPolicyActionType, + ) + from datadog_api_client.v2.model.urgency import Urgency + + return { + "ack_timeout_minutes": (int,), + "policy_id": (str,), + "support_hours": (RoutingRuleEscalationPolicyActionSupportHours,), + "type": (RoutingRuleEscalationPolicyActionType,), + "urgency": (Urgency,), + } + + attribute_map = { + "ack_timeout_minutes": "ack_timeout_minutes", + "policy_id": "policy_id", + "support_hours": "support_hours", + "type": "type", + "urgency": "urgency", + } + + def __init__( + self_, + policy_id: str, + type: RoutingRuleEscalationPolicyActionType, + ack_timeout_minutes: Union[int, UnsetType] = unset, + support_hours: Union[RoutingRuleEscalationPolicyActionSupportHours, UnsetType] = unset, + urgency: Union[Urgency, UnsetType] = unset, + **kwargs, + ): + """ + Triggers an escalation policy. + + :param ack_timeout_minutes: The number of minutes before an acknowledged page is re-triggered. + :type ack_timeout_minutes: int, optional + + :param policy_id: The ID of the escalation policy to route to. + :type policy_id: str + + :param support_hours: Support hours during which the escalation policy will be executed. Outside of these hours, the escalation policy will be on hold and triggered once the next support hours window starts. + :type support_hours: RoutingRuleEscalationPolicyActionSupportHours, optional + + :param type: Indicates that the action routes to an escalation policy. This action can be set once per routing rule, and cannot be combined with the legacy top-level ``policy_id`` field on the routing rule. + :type type: RoutingRuleEscalationPolicyActionType + + :param urgency: Specifies the level of urgency for a routing rule (low, high, or dynamic). + :type urgency: Urgency, optional + """ + if ack_timeout_minutes is not unset: + kwargs["ack_timeout_minutes"] = ack_timeout_minutes + if support_hours is not unset: + kwargs["support_hours"] = support_hours + if urgency is not unset: + kwargs["urgency"] = urgency + super().__init__(kwargs) + + self_.policy_id = policy_id + self_.type = type diff --git a/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py new file mode 100644 index 0000000000..1e3b85326e --- /dev/null +++ b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py @@ -0,0 +1,49 @@ +# 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.time_restriction import TimeRestriction + + +class RoutingRuleEscalationPolicyActionSupportHours(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.time_restriction import TimeRestriction + + return { + "restrictions": ([TimeRestriction],), + "time_zone": (str,), + } + + attribute_map = { + "restrictions": "restrictions", + "time_zone": "time_zone", + } + + def __init__(self_, time_zone: str, restrictions: Union[List[TimeRestriction], UnsetType] = unset, **kwargs): + """ + Support hours during which the escalation policy will be executed. Outside of these hours, the escalation policy will be on hold and triggered once the next support hours window starts. + + :param restrictions: The list of support hours time windows. + :type restrictions: [TimeRestriction], optional + + :param time_zone: The time zone in which the support hours are expressed. + :type time_zone: str + """ + if restrictions is not unset: + kwargs["restrictions"] = restrictions + super().__init__(kwargs) + + self_.time_zone = time_zone diff --git a/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_type.py b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_type.py new file mode 100644 index 0000000000..c1da1950bb --- /dev/null +++ b/src/datadog_api_client/v2/model/routing_rule_escalation_policy_action_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 RoutingRuleEscalationPolicyActionType(ModelSimple): + """ + Indicates that the action routes to an escalation policy. This action can be set once per routing rule, and cannot be combined with the legacy top-level `policy_id` field on the routing rule. + + :param value: If omitted defaults to "escalation_policy". Must be one of ["escalation_policy"]. + :type value: str + """ + + allowed_values = { + "escalation_policy", + } + ESCALATION_POLICY: ClassVar["RoutingRuleEscalationPolicyActionType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +RoutingRuleEscalationPolicyActionType.ESCALATION_POLICY = RoutingRuleEscalationPolicyActionType("escalation_policy") diff --git a/src/datadog_api_client/v2/model/team_routing_rules_request_rule.py b/src/datadog_api_client/v2/model/team_routing_rules_request_rule.py index 9ea2ec0ff4..2bb845f56c 100644 --- a/src/datadog_api_client/v2/model/team_routing_rules_request_rule.py +++ b/src/datadog_api_client/v2/model/team_routing_rules_request_rule.py @@ -20,6 +20,7 @@ from datadog_api_client.v2.model.send_slack_message_action import SendSlackMessageAction from datadog_api_client.v2.model.send_teams_message_action import SendTeamsMessageAction from datadog_api_client.v2.model.trigger_workflow_automation_action import TriggerWorkflowAutomationAction + from datadog_api_client.v2.model.routing_rule_escalation_policy_action import RoutingRuleEscalationPolicyAction class TeamRoutingRulesRequestRule(ModelNormal): @@ -50,7 +51,11 @@ def __init__( actions: Union[ List[ Union[ - RoutingRuleAction, SendSlackMessageAction, SendTeamsMessageAction, TriggerWorkflowAutomationAction + RoutingRuleAction, + SendSlackMessageAction, + SendTeamsMessageAction, + TriggerWorkflowAutomationAction, + RoutingRuleEscalationPolicyAction, ] ], UnsetType, diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index 26fdc85362..9f85977b3d 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -5422,6 +5422,11 @@ from datadog_api_client.v2.model.routing_rule import RoutingRule from datadog_api_client.v2.model.routing_rule_action import RoutingRuleAction from datadog_api_client.v2.model.routing_rule_attributes import RoutingRuleAttributes +from datadog_api_client.v2.model.routing_rule_escalation_policy_action import RoutingRuleEscalationPolicyAction +from datadog_api_client.v2.model.routing_rule_escalation_policy_action_support_hours import ( + RoutingRuleEscalationPolicyActionSupportHours, +) +from datadog_api_client.v2.model.routing_rule_escalation_policy_action_type import RoutingRuleEscalationPolicyActionType from datadog_api_client.v2.model.routing_rule_relationships import RoutingRuleRelationships from datadog_api_client.v2.model.routing_rule_relationships_policy import RoutingRuleRelationshipsPolicy from datadog_api_client.v2.model.routing_rule_relationships_policy_data import RoutingRuleRelationshipsPolicyData @@ -11432,6 +11437,9 @@ "RoutingRule", "RoutingRuleAction", "RoutingRuleAttributes", + "RoutingRuleEscalationPolicyAction", + "RoutingRuleEscalationPolicyActionSupportHours", + "RoutingRuleEscalationPolicyActionType", "RoutingRuleRelationships", "RoutingRuleRelationshipsPolicy", "RoutingRuleRelationshipsPolicyData", diff --git a/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.frozen index 7a29240030..4828503afd 100644 --- a/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.frozen +++ b/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.frozen @@ -1 +1 @@ -2025-11-27T14:11:49.966Z \ No newline at end of file +2026-05-13T17:02:48.620Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.yaml index 0c06835bb5..45a4504b89 100644 --- a/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.yaml +++ b/tests/v2/cassettes/test_scenarios/test_set_oncall_team_routing_rules_returns_ok_response.yaml @@ -1,6 +1,6 @@ interactions: - request: - body: '{"data":{"attributes":{"email":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1764252709@datadoghq.com","title":"user + body: '{"data":{"attributes":{"email":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778691768@datadoghq.com","title":"user title"},"type":"users"}}' headers: accept: @@ -11,7 +11,7 @@ interactions: uri: https://api.datadoghq.com/api/v2/users response: body: - string: '{"data":{"type":"users","id":"0473ca92-cb9b-11f0-85f9-9a82ffe01443","attributes":{"name":null,"handle":"test-set_on_call_team_routing_rules_returns_ok_response-1764252709@datadoghq.com","created_at":"2025-11-27T14:11:50.355271+00:00","modified_at":"2025-11-27T14:11:50.355271+00:00","email":"test-set_on_call_team_routing_rules_returns_ok_response-1764252709@datadoghq.com","icon":"https://secure.gravatar.com/avatar/ad92f892fdf302962d879c0d02664d8e?s=48&d=retro","title":"user + string: '{"data":{"type":"users","id":"8ba1338f-2ba8-4bbd-8bac-8ec9af981753","attributes":{"uuid":"8ba1338f-2ba8-4bbd-8bac-8ec9af981753","name":null,"handle":"test-set_on_call_team_routing_rules_returns_ok_response-1778691768@datadoghq.com","created_at":"2026-05-13T17:02:49.927240+00:00","modified_at":"2026-05-13T17:02:49.927240+00:00","email":"test-set_on_call_team_routing_rules_returns_ok_response-1778691768@datadoghq.com","icon":"https://secure.gravatar.com/avatar/946e009de7afa32586fa1a76112404d9?s=48&d=retro","title":"user title","verified":false,"service_account":false,"disabled":false,"allowed_login_methods":[],"status":"Pending","last_login_time":null},"relationships":{"roles":{"data":[]},"org":{"data":{"type":"orgs","id":"4dee724d-00cc-11ea-a77b-570c9d03c6c5"}}}}} ' @@ -22,7 +22,7 @@ interactions: code: 201 message: Created - request: - body: '{"data":{"attributes":{"handle":"test-handle-a7692378c203a880","name":"test-name-a7692378c203a880"},"type":"team"}}' + body: '{"data":{"attributes":{"handle":"test-handle-1707339b9878658c","name":"test-name-1707339b9878658c"},"type":"team"}}' headers: accept: - application/json @@ -32,7 +32,7 @@ interactions: uri: https://api.datadoghq.com/api/v2/team response: body: - string: '{"data":{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"team","attributes":{"avatar":null,"banner":14,"created_at":"2025-11-27T14:11:50.842947+00:00","description":null,"handle":"test-handle-a7692378c203a880","hidden_modules":[],"link_count":0,"modified_at":"2025-11-27T14:11:50.842947+00:00","name":"test-name-a7692378c203a880","summary":null,"user_count":0,"visible_modules":[]},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/ba4fe917-0da4-4b40-96da-f9d7306d97d8/links"}},"user_team_permissions":{"links":{"related":"/api/v2/team/ba4fe917-0da4-4b40-96da-f9d7306d97d8/permission-settings"}}}}}' + string: '{"data":{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"team","attributes":{"avatar":null,"banner":14,"created_at":"2026-05-13T17:02:50.456619+00:00","description":null,"handle":"test-handle-1707339b9878658c","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2026-05-13T17:02:50.456619+00:00","name":"test-name-1707339b9878658c","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/88f4bcb7-f8c9-4523-9fb7-eceecb1f8611/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/88f4bcb7-f8c9-4523-9fb7-eceecb1f8611/permission-settings"}}}}}' headers: content-type: - application/vnd.api+json @@ -40,8 +40,8 @@ interactions: code: 201 message: Created - request: - body: '{"data":{"attributes":{"layers":[{"effective_date":"2025-11-17T14:11:49.966Z","end_date":"2025-12-07T14:11:49.966Z","interval":{"days":1},"members":[{"user":{"id":"0473ca92-cb9b-11f0-85f9-9a82ffe01443"}}],"name":"Layer - 1","restrictions":[{"end_day":"friday","end_time":"17:00:00","start_day":"monday","start_time":"09:00:00"}],"rotation_start":"2025-11-22T14:11:49.966Z"}],"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1764252709","time_zone":"America/New_York"},"relationships":{"teams":{"data":[{"id":"65aea9d0-941c-4607-bf8a-14fc0dac2820","type":"teams"}]}},"type":"schedules"}}' + body: '{"data":{"attributes":{"layers":[{"effective_date":"2026-05-03T17:02:48.620Z","end_date":"2026-05-23T17:02:48.620Z","interval":{"days":1},"members":[{"user":{"id":"8ba1338f-2ba8-4bbd-8bac-8ec9af981753"}}],"name":"Layer + 1","restrictions":[{"end_day":"friday","end_time":"17:00:00","start_day":"monday","start_time":"09:00:00"}],"rotation_start":"2026-05-08T17:02:48.620Z"}],"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778691768","time_zone":"America/New_York"},"relationships":{"teams":{"data":[{"id":"65aea9d0-941c-4607-bf8a-14fc0dac2820","type":"teams"}]}},"type":"schedules"}}' headers: accept: - application/json @@ -51,7 +51,7 @@ interactions: uri: https://api.datadoghq.com/api/v2/on-call/schedules response: body: - string: '{"data":{"id":"1f9b0595-17a3-4d95-9b2e-edcea3b6e737","type":"schedules","attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1764252709","time_zone":"America/New_York"},"relationships":{"layers":{"data":[{"id":"0eecb6fe-83c6-48c9-9e0e-82379498f733","type":"layers"}]},"teams":{"data":[{"id":"65aea9d0-941c-4607-bf8a-14fc0dac2820","type":"teams"}]}}}}' + string: '{"data":{"id":"f077460e-c850-4a68-b662-6aa051b453ac","type":"schedules","attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778691768","time_zone":"America/New_York"},"relationships":{"layers":{"data":[{"id":"ef374f68-26a5-488d-abea-5776eab7351f","type":"layers"}]},"teams":{"data":[{"id":"65aea9d0-941c-4607-bf8a-14fc0dac2820","type":"teams"}]}}}}' headers: content-type: - application/vnd.api+json @@ -59,7 +59,7 @@ interactions: code: 201 message: Created - request: - body: '{"data":{"attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1764252709","resolve_page_on_policy_end":true,"retries":2,"steps":[{"assignment":"default","escalate_after_seconds":3600,"targets":[{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"teams"},{"id":"1f9b0595-17a3-4d95-9b2e-edcea3b6e737","type":"schedules"},{"config":{"schedule":{"position":"previous"}},"id":"1f9b0595-17a3-4d95-9b2e-edcea3b6e737","type":"schedules"},{"id":"0473ca92-cb9b-11f0-85f9-9a82ffe01443","type":"users"}]},{"assignment":"round-robin","escalate_after_seconds":3600,"targets":[{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"teams"}]}]},"relationships":{"teams":{"data":[{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"teams"}]}},"type":"policies"}}' + body: '{"data":{"attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778691768","resolve_page_on_policy_end":true,"retries":2,"steps":[{"assignment":"default","escalate_after_seconds":3600,"targets":[{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"teams"},{"id":"f077460e-c850-4a68-b662-6aa051b453ac","type":"schedules"},{"config":{"schedule":{"position":"previous"}},"id":"f077460e-c850-4a68-b662-6aa051b453ac","type":"schedules"},{"id":"8ba1338f-2ba8-4bbd-8bac-8ec9af981753","type":"users"}]},{"assignment":"round-robin","escalate_after_seconds":3600,"targets":[{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"teams"}]}]},"relationships":{"teams":{"data":[{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"teams"}]}},"type":"policies"}}' headers: accept: - application/json @@ -69,7 +69,7 @@ interactions: uri: https://api.datadoghq.com/api/v2/on-call/escalation-policies response: body: - string: '{"data":{"id":"66f0e922-2834-4d68-aa0b-98cc81fc2a9d","type":"policies","attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1764252709","resolve_page_on_policy_end":true,"retries":2},"relationships":{"steps":{"data":[{"id":"533f661e-6a1f-4327-8d3f-035add94cff8","type":"steps"},{"id":"b8948730-6aec-4a51-8662-cce4026b94dc","type":"steps"}]},"teams":{"data":[{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"teams"}]}}}}' + string: '{"data":{"id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","type":"policies","attributes":{"name":"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778691768","resolve_page_on_policy_end":true,"retries":2,"tags":[]},"relationships":{"steps":{"data":[{"id":"0acbd132-0eb2-4cd6-b2b8-421912186e5c","type":"steps"},{"id":"542a6a4e-d82a-40a5-8641-76c224a8f185","type":"steps"}]},"teams":{"data":[{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"teams"}]}}}}' headers: content-type: - application/vnd.api+json @@ -77,17 +77,17 @@ interactions: code: 201 message: Created - request: - body: '{"data":{"attributes":{"rules":[{"actions":[{"channel":"channel","type":"send_slack_message","workspace":"workspace"}],"query":"tags.service:test","time_restriction":{"restrictions":[{"end_day":"monday","end_time":"17:00:00","start_day":"monday","start_time":"09:00:00"},{"end_day":"tuesday","end_time":"17:00:00","start_day":"tuesday","start_time":"09:00:00"}],"time_zone":"Europe/Paris"}},{"policy_id":"66f0e922-2834-4d68-aa0b-98cc81fc2a9d","query":"","urgency":"low"}]},"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"team_routing_rules"}}' + body: '{"data":{"attributes":{"rules":[{"actions":[{"ack_timeout_minutes":30,"policy_id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","type":"escalation_policy","urgency":"low"}],"query":"tags.service:test","time_restriction":{"restrictions":[{"end_day":"monday","end_time":"17:00:00","start_day":"monday","start_time":"09:00:00"},{"end_day":"tuesday","end_time":"17:00:00","start_day":"tuesday","start_time":"09:00:00"}],"time_zone":"Europe/Paris"}},{"policy_id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","query":"","urgency":"low"}]},"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"team_routing_rules"}}' headers: accept: - application/json content-type: - application/json method: PUT - uri: https://api.datadoghq.com/api/v2/on-call/teams/ba4fe917-0da4-4b40-96da-f9d7306d97d8/routing-rules?include=rules + uri: https://api.datadoghq.com/api/v2/on-call/teams/88f4bcb7-f8c9-4523-9fb7-eceecb1f8611/routing-rules?include=rules response: body: - string: '{"data":{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"team_routing_rules","relationships":{"rules":{"data":[{"id":"virtual-ba4fe917-0da4-4b40-96da-f9d7306d97d8-rule-0","type":"team_routing_rules"},{"id":"virtual-ba4fe917-0da4-4b40-96da-f9d7306d97d8-rule-1","type":"team_routing_rules"}]}}},"included":[{"id":"virtual-ba4fe917-0da4-4b40-96da-f9d7306d97d8-rule-0","type":"team_routing_rules","attributes":{"actions":[{"type":"send_slack_message","channel":"channel","workspace":"workspace"}],"query":"tags.service:test","time_restriction":{"time_zone":"Europe/Paris","restrictions":[{"start_time":"09:00:00","start_day":"monday","end_time":"17:00:00","end_day":"monday"},{"start_time":"09:00:00","start_day":"tuesday","end_time":"17:00:00","end_day":"tuesday"}]}},"relationships":{"policy":{"data":null}}},{"id":"virtual-ba4fe917-0da4-4b40-96da-f9d7306d97d8-rule-1","type":"team_routing_rules","attributes":{"actions":[],"query":"","urgency":"low"},"relationships":{"policy":{"data":{"id":"66f0e922-2834-4d68-aa0b-98cc81fc2a9d","type":"policies"}}}}]}' + string: '{"data":{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"team_routing_rules","relationships":{"rules":{"data":[{"id":"2a597a36-6802-4fd0-966a-fa7aedf24360","type":"team_routing_rules"},{"id":"cddd10dd-33ef-4d55-a761-d3cf16d4c472","type":"team_routing_rules"}]}}},"included":[{"id":"2a597a36-6802-4fd0-966a-fa7aedf24360","type":"team_routing_rules","attributes":{"actions":[{"type":"escalation_policy","policy_id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","ack_timeout_minutes":30,"urgency":"low"}],"query":"tags.service:test","time_restriction":{"time_zone":"Europe/Paris","restrictions":[{"start_time":"09:00:00","start_day":"monday","end_time":"17:00:00","end_day":"monday"},{"start_time":"09:00:00","start_day":"tuesday","end_time":"17:00:00","end_day":"tuesday"}]},"urgency":"low"},"relationships":{"policy":{"data":{"id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","type":"policies"}}}},{"id":"cddd10dd-33ef-4d55-a761-d3cf16d4c472","type":"team_routing_rules","attributes":{"actions":[{"type":"escalation_policy","policy_id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","urgency":"low"}],"query":"","urgency":"low"},"relationships":{"policy":{"data":{"id":"f7d6f87d-fff4-4ed5-a466-67ad2ee998d5","type":"policies"}}}}]}' headers: content-type: - application/vnd.api+json @@ -95,17 +95,17 @@ interactions: code: 200 message: OK - request: - body: '{"data":{"attributes":{"rules":[]},"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"team_routing_rules"}}' + body: '{"data":{"attributes":{"rules":[]},"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"team_routing_rules"}}' headers: accept: - application/json content-type: - application/json method: PUT - uri: https://api.datadoghq.com/api/v2/on-call/teams/ba4fe917-0da4-4b40-96da-f9d7306d97d8/routing-rules + uri: https://api.datadoghq.com/api/v2/on-call/teams/88f4bcb7-f8c9-4523-9fb7-eceecb1f8611/routing-rules response: body: - string: '{"data":{"id":"ba4fe917-0da4-4b40-96da-f9d7306d97d8","type":"team_routing_rules","relationships":{"rules":{"data":[]}}}}' + string: '{"data":{"id":"88f4bcb7-f8c9-4523-9fb7-eceecb1f8611","type":"team_routing_rules","relationships":{"rules":{"data":[]}}}}' headers: content-type: - application/vnd.api+json @@ -118,7 +118,7 @@ interactions: accept: - '*/*' method: DELETE - uri: https://api.datadoghq.com/api/v2/on-call/escalation-policies/66f0e922-2834-4d68-aa0b-98cc81fc2a9d + uri: https://api.datadoghq.com/api/v2/on-call/escalation-policies/f7d6f87d-fff4-4ed5-a466-67ad2ee998d5 response: body: string: '' @@ -132,7 +132,7 @@ interactions: accept: - '*/*' method: DELETE - uri: https://api.datadoghq.com/api/v2/on-call/schedules/1f9b0595-17a3-4d95-9b2e-edcea3b6e737 + uri: https://api.datadoghq.com/api/v2/on-call/schedules/f077460e-c850-4a68-b662-6aa051b453ac response: body: string: '' @@ -146,7 +146,7 @@ interactions: accept: - '*/*' method: DELETE - uri: https://api.datadoghq.com/api/v2/team/ba4fe917-0da4-4b40-96da-f9d7306d97d8 + uri: https://api.datadoghq.com/api/v2/team/88f4bcb7-f8c9-4523-9fb7-eceecb1f8611 response: body: string: '' @@ -160,7 +160,7 @@ interactions: accept: - '*/*' method: DELETE - uri: https://api.datadoghq.com/api/v2/users/0473ca92-cb9b-11f0-85f9-9a82ffe01443 + uri: https://api.datadoghq.com/api/v2/users/8ba1338f-2ba8-4bbd-8bac-8ec9af981753 response: body: string: '' diff --git a/tests/v2/features/on-call.feature b/tests/v2/features/on-call.feature index 0f4b2a0e34..70221fe1da 100644 --- a/tests/v2/features/on-call.feature +++ b/tests/v2/features/on-call.feature @@ -401,7 +401,7 @@ Feature: On-Call And there is a valid "schedule" in the system And there is a valid "escalation_policy" in the system And request contains "team_id" parameter from "dd_team.data.id" - And body with value {"data": {"attributes": {"rules": [{"actions": [{"channel": "channel", "type": "send_slack_message", "workspace": "workspace"}], "query": "tags.service:test", "time_restriction": {"time_zone": "Europe/Paris", "restrictions": [{"end_day": "monday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}, {"end_day": "tuesday", "end_time": "17:00:00", "start_day": "tuesday", "start_time": "09:00:00"}]}}, {"policy_id": "{{ escalation_policy.data.id }}", "query": "", "urgency": "low"}]}, "id": "{{ dd_team.data.id }}", "type": "team_routing_rules"}} + And body with value {"data": {"attributes": {"rules": [{"actions": [{"type": "escalation_policy", "policy_id": "{{ escalation_policy.data.id }}", "urgency": "low", "ack_timeout_minutes": 30}], "query": "tags.service:test", "time_restriction": {"time_zone": "Europe/Paris", "restrictions": [{"end_day": "monday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}, {"end_day": "tuesday", "end_time": "17:00:00", "start_day": "tuesday", "start_time": "09:00:00"}]}}, {"policy_id": "{{ escalation_policy.data.id }}", "query": "", "urgency": "low"}]}, "id": "{{ dd_team.data.id }}", "type": "team_routing_rules"}} And request contains "include" parameter with value "rules" When the request is sent Then the response status is 200 OK