diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index 9466f691bd..aa4e625e59 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -8067,6 +8067,36 @@ components: - data_source - query type: object + MonitorFormulaAndFunctionDataJobsQueryDefinition: + description: A formula and functions data jobs query. + properties: + job_type: + description: |- + The type of job being monitored. Valid values include: + `databricks.job`, `spark.application`, `airflow.dag`, + `dbt.job`, `dbt.model`, `dbt.test`, `glue.job`. + Custom job types are supported with the `custom.ol.` prefix. + example: "databricks.job" + type: string + jobs_query: + description: Filter expression used to select the jobs to monitor. + example: "job_name:smoke*" + type: string + name: + description: Name of the query for use in formulas. Must be `run_query`. + example: "run_query" + type: string + query_dialect: + description: |- + Query dialect for data jobs queries. Currently only `metric` is supported. + example: "metric" + type: string + required: + - name + - jobs_query + - job_type + - query_dialect + type: object MonitorFormulaAndFunctionDataQualityDataSource: description: Data source for data quality queries. enum: @@ -8373,6 +8403,7 @@ components: - $ref: "#/components/schemas/MonitorFormulaAndFunctionEventQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionCostQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionDataQualityQueryDefinition" + - $ref: "#/components/schemas/MonitorFormulaAndFunctionDataJobsQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition" - $ref: "#/components/schemas/MonitorFormulaAndFunctionAggregateFilteredQueryDefinition" MonitorFormulaAndFunctionReferenceTableColumn: @@ -9205,6 +9236,7 @@ components: - "cost alert" - "data-quality alert" - "network-path alert" + - "data-jobs alert" example: "query alert" type: string x-enum-varnames: @@ -9229,6 +9261,7 @@ components: - COST_ALERT - DATA_QUALITY_ALERT - NETWORK_PATH_ALERT + - DATA_JOBS_ALERT MonitorUpdateRequest: description: Object describing a monitor update request. properties: diff --git a/docs/datadog_api_client.v1.model.rst b/docs/datadog_api_client.v1.model.rst index 9b46a58093..abf5432419 100644 --- a/docs/datadog_api_client.v1.model.rst +++ b/docs/datadog_api_client.v1.model.rst @@ -2608,6 +2608,13 @@ datadog\_api\_client.v1.model.monitor\_formula\_and\_function\_cost\_query\_defi :members: :show-inheritance: +datadog\_api\_client.v1.model.monitor\_formula\_and\_function\_data\_jobs\_query\_definition module +--------------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.monitor_formula_and_function_data_jobs_query_definition + :members: + :show-inheritance: + datadog\_api\_client.v1.model.monitor\_formula\_and\_function\_data\_quality\_data\_source module ------------------------------------------------------------------------------------------------- diff --git a/examples/v1/monitors/CreateMonitor_2589528326.py b/examples/v1/monitors/CreateMonitor_2589528326.py new file mode 100644 index 0000000000..9610c9941e --- /dev/null +++ b/examples/v1/monitors/CreateMonitor_2589528326.py @@ -0,0 +1,44 @@ +""" +Create a Data Jobs monitor returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v1.api.monitors_api import MonitorsApi +from datadog_api_client.v1.model.monitor import Monitor +from datadog_api_client.v1.model.monitor_formula_and_function_data_jobs_query_definition import ( + MonitorFormulaAndFunctionDataJobsQueryDefinition, +) +from datadog_api_client.v1.model.monitor_options import MonitorOptions +from datadog_api_client.v1.model.monitor_thresholds import MonitorThresholds +from datadog_api_client.v1.model.monitor_type import MonitorType + +body = Monitor( + name="Example-Monitor", + type=MonitorType.DATA_JOBS_ALERT, + query='formula("failed_runs(run_query)").by(job_name,workspace_name).last(10d) > 0', + message="Data jobs alert triggered", + tags=[ + "test:examplemonitor", + "env:ci", + ], + options=MonitorOptions( + thresholds=MonitorThresholds( + critical=0.0, + ), + variables=[ + MonitorFormulaAndFunctionDataJobsQueryDefinition( + name="run_query", + jobs_query="job_name:*", + job_type="databricks.job", + query_dialect="metric", + ), + ], + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = MonitorsApi(api_client) + response = api_instance.create_monitor(body=body) + + print(response) diff --git a/src/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py b/src/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py new file mode 100644 index 0000000000..cad58de6f0 --- /dev/null +++ b/src/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py @@ -0,0 +1,54 @@ +# 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 ( + ModelNormal, + cached_property, +) + + +class MonitorFormulaAndFunctionDataJobsQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "job_type": (str,), + "jobs_query": (str,), + "name": (str,), + "query_dialect": (str,), + } + + attribute_map = { + "job_type": "job_type", + "jobs_query": "jobs_query", + "name": "name", + "query_dialect": "query_dialect", + } + + def __init__(self_, job_type: str, jobs_query: str, name: str, query_dialect: str, **kwargs): + """ + A formula and functions data jobs query. + + :param job_type: The type of job being monitored. Valid values include: + ``databricks.job`` , ``spark.application`` , ``airflow.dag`` , + ``dbt.job`` , ``dbt.model`` , ``dbt.test`` , ``glue.job``. + Custom job types are supported with the ``custom.ol.`` prefix. + :type job_type: str + + :param jobs_query: Filter expression used to select the jobs to monitor. + :type jobs_query: str + + :param name: Name of the query for use in formulas. Must be ``run_query``. + :type name: str + + :param query_dialect: Query dialect for data jobs queries. Currently only ``metric`` is supported. + :type query_dialect: str + """ + super().__init__(kwargs) + + self_.job_type = job_type + self_.jobs_query = jobs_query + self_.name = name + self_.query_dialect = query_dialect diff --git a/src/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py b/src/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py index 0399385079..008af69f40 100644 --- a/src/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py +++ b/src/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py @@ -58,6 +58,18 @@ def __init__(self, **kwargs): This is useful when an entity has been configured to emit metrics with additional tags. :type scope: str, optional + :param job_type: The type of job being monitored. Valid values include: + `databricks.job`, `spark.application`, `airflow.dag`, + `dbt.job`, `dbt.model`, `dbt.test`, `glue.job`. + Custom job types are supported with the `custom.ol.` prefix. + :type job_type: str + + :param jobs_query: Filter expression used to select the jobs to monitor. + :type jobs_query: str + + :param query_dialect: Query dialect for data jobs queries. Currently only `metric` is supported. + :type query_dialect: str + :param augment_query: Augment query for aggregate augmented queries. Can be an events query or a reference table query. :type augment_query: MonitorFormulaAndFunctionAggregateAugmentQuery @@ -93,6 +105,9 @@ def _composed_schemas(_): from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_query_definition import ( MonitorFormulaAndFunctionDataQualityQueryDefinition, ) + from datadog_api_client.v1.model.monitor_formula_and_function_data_jobs_query_definition import ( + MonitorFormulaAndFunctionDataJobsQueryDefinition, + ) from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_query_definition import ( MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, ) @@ -105,6 +120,7 @@ def _composed_schemas(_): MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionCostQueryDefinition, MonitorFormulaAndFunctionDataQualityQueryDefinition, + MonitorFormulaAndFunctionDataJobsQueryDefinition, MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, ], diff --git a/src/datadog_api_client/v1/model/monitor_options.py b/src/datadog_api_client/v1/model/monitor_options.py index 9bdd86c3eb..7596b26290 100644 --- a/src/datadog_api_client/v1/model/monitor_options.py +++ b/src/datadog_api_client/v1/model/monitor_options.py @@ -35,6 +35,9 @@ from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_query_definition import ( MonitorFormulaAndFunctionDataQualityQueryDefinition, ) + from datadog_api_client.v1.model.monitor_formula_and_function_data_jobs_query_definition import ( + MonitorFormulaAndFunctionDataJobsQueryDefinition, + ) from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_query_definition import ( MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, ) @@ -183,6 +186,7 @@ def __init__( MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionCostQueryDefinition, MonitorFormulaAndFunctionDataQualityQueryDefinition, + MonitorFormulaAndFunctionDataJobsQueryDefinition, MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, ] diff --git a/src/datadog_api_client/v1/model/monitor_type.py b/src/datadog_api_client/v1/model/monitor_type.py index bcad200492..a7683ef1c6 100644 --- a/src/datadog_api_client/v1/model/monitor_type.py +++ b/src/datadog_api_client/v1/model/monitor_type.py @@ -16,7 +16,7 @@ class MonitorType(ModelSimple): """ The type of the monitor. For more information about `type`, see the [monitor options](https://docs.datadoghq.com/monitors/guide/monitor_api_options/) docs. - :param value: Must be one of ["composite", "event alert", "log alert", "metric alert", "process alert", "query alert", "rum alert", "service check", "synthetics alert", "trace-analytics alert", "slo alert", "event-v2 alert", "audit alert", "ci-pipelines alert", "ci-tests alert", "error-tracking alert", "database-monitoring alert", "network-performance alert", "cost alert", "data-quality alert", "network-path alert"]. + :param value: Must be one of ["composite", "event alert", "log alert", "metric alert", "process alert", "query alert", "rum alert", "service check", "synthetics alert", "trace-analytics alert", "slo alert", "event-v2 alert", "audit alert", "ci-pipelines alert", "ci-tests alert", "error-tracking alert", "database-monitoring alert", "network-performance alert", "cost alert", "data-quality alert", "network-path alert", "data-jobs alert"]. :type value: str """ @@ -42,6 +42,7 @@ class MonitorType(ModelSimple): "cost alert", "data-quality alert", "network-path alert", + "data-jobs alert", } COMPOSITE: ClassVar["MonitorType"] EVENT_ALERT: ClassVar["MonitorType"] @@ -64,6 +65,7 @@ class MonitorType(ModelSimple): COST_ALERT: ClassVar["MonitorType"] DATA_QUALITY_ALERT: ClassVar["MonitorType"] NETWORK_PATH_ALERT: ClassVar["MonitorType"] + DATA_JOBS_ALERT: ClassVar["MonitorType"] @cached_property def openapi_types(_): @@ -93,3 +95,4 @@ def openapi_types(_): MonitorType.COST_ALERT = MonitorType("cost alert") MonitorType.DATA_QUALITY_ALERT = MonitorType("data-quality alert") MonitorType.NETWORK_PATH_ALERT = MonitorType("network-path alert") +MonitorType.DATA_JOBS_ALERT = MonitorType("data-jobs alert") diff --git a/src/datadog_api_client/v1/models/__init__.py b/src/datadog_api_client/v1/models/__init__.py index 74c9c174e4..57a966228d 100644 --- a/src/datadog_api_client/v1/models/__init__.py +++ b/src/datadog_api_client/v1/models/__init__.py @@ -450,6 +450,9 @@ from datadog_api_client.v1.model.monitor_formula_and_function_cost_query_definition import ( MonitorFormulaAndFunctionCostQueryDefinition, ) +from datadog_api_client.v1.model.monitor_formula_and_function_data_jobs_query_definition import ( + MonitorFormulaAndFunctionDataJobsQueryDefinition, +) from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_data_source import ( MonitorFormulaAndFunctionDataQualityDataSource, ) @@ -1718,6 +1721,7 @@ "MonitorFormulaAndFunctionCostAggregator", "MonitorFormulaAndFunctionCostDataSource", "MonitorFormulaAndFunctionCostQueryDefinition", + "MonitorFormulaAndFunctionDataJobsQueryDefinition", "MonitorFormulaAndFunctionDataQualityDataSource", "MonitorFormulaAndFunctionDataQualityModelTypeOverride", "MonitorFormulaAndFunctionDataQualityMonitorOptions", diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.frozen b/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.frozen new file mode 100644 index 0000000000..1665e973da --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.frozen @@ -0,0 +1 @@ +2026-05-14T10:58:54.153Z \ No newline at end of file diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.yaml b/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.yaml new file mode 100644 index 0000000000..4abdcbf48a --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_data_jobs_monitor_returns_ok_response.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"message":"Data jobs alert triggered","name":"Test-Create_a_Data_Jobs_monitor_returns_OK_response-1778756334","options":{"thresholds":{"critical":0},"variables":[{"job_type":"databricks.job","jobs_query":"job_name:*","name":"run_query","query_dialect":"metric"}]},"query":"formula(\"failed_runs(run_query)\").by(job_name,workspace_name).last(10d) + > 0","tags":["test:testcreateadatajobsmonitorreturnsokresponse1778756334","env:ci"],"type":"data-jobs + alert"}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v1/monitor + response: + body: + string: '{"id":283063470,"org_id":321813,"type":"data-jobs alert","name":"Test-Create_a_Data_Jobs_monitor_returns_OK_response-1778756334","message":"Data + jobs alert triggered","tags":["test:testcreateadatajobsmonitorreturnsokresponse1778756334","env:ci"],"query":"formula(\"failed_runs(run_query)\").by(job_name,workspace_name).last(10d) + > 0","options":{"thresholds":{"critical":0.0},"variables":[{"job_type":"databricks.job","jobs_query":"job_name:*","name":"run_query","query_dialect":"metric"}],"notify_no_data":false,"notify_audit":false,"new_host_delay":300,"include_tags":true,"silenced":{}},"multi":true,"created_at":1778756334000,"created":"2026-05-14T10:58:54.236230+00:00","modified":"2026-05-14T10:58:54.236230+00:00","deleted":null,"priority":null,"restricted_roles":null,"restriction_policy":null,"draft_status":"published","assets":[],"overall_state_modified":null,"overall_state":"No + Data","creator":{"name":"CI Account","handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","email":"team-intg-tools-libs-spam@datadoghq.com","id":2320499}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - application/json + method: DELETE + uri: https://api.datadoghq.com/api/v1/monitor/283063470 + response: + body: + string: '{"deleted_monitor_id":283063470} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +version: 1 diff --git a/tests/v1/features/monitors.feature b/tests/v1/features/monitors.feature index 63bb9f16b9..f7fd40f4ed 100644 --- a/tests/v1/features/monitors.feature +++ b/tests/v1/features/monitors.feature @@ -42,6 +42,15 @@ Feature: Monitors When the request is sent Then the response status is 200 OK + @team:DataDog/monitor-app + Scenario: Create a Data Jobs monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "data-jobs alert", "query": "formula(\"failed_runs(run_query)\").by(job_name,workspace_name).last(10d) > 0", "message": "Data jobs alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "options": {"thresholds": {"critical": 0}, "variables": [{"name": "run_query", "jobs_query": "job_name:*", "job_type": "databricks.job", "query_dialect": "metric"}]}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "type" is equal to "data-jobs alert" + @team:DataDog/monitor-app Scenario: Create a Data Quality monitor returns "OK" response Given new "CreateMonitor" request